Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/06/2006, à 10:56

aleph

Expression régulières -> BlackPignour

> BlackPignouf
De rien.... et l'expression trouvant tous les mots commençant par une consonne et finissant par une voyelle?

Intéressant...

Mon expression régulière...

\s[bcdfghjklmnpqrstvwxzçÇ]{1}[a-zçÇáàâäãéèêëíìîióòôõöúùûüýÿÀÁÂàÄÅÈÉÊËÌÍÎÏÒÓÔÕÙÚÛÜÝ]*[aeiouáàâäãéèêëíìîióòôõöúùûüýÿÀÁÂàÄÅÈÉÊËÌÍÎÏÒÓÔÕÙÚÛÜÝ]{1}
|^[bcdfghjklmnpqrstvwxzçÇ]{1}[a-zçÇáàâäãéèêëíìîióòôõöúùûüýÿÀÁÂàÄÅÈÉÊËÌÍÎÏÒÓÔÕÙÚÛÜÝ]*[aeiouáàâäãéèêëíìîióòôõöúùûüýÿÀÁÂàÄÅÈÉÊËÌÍÎÏÒÓÔÕÙÚÛÜÝ]{1}

...et quelques commentaires

- je reste dans le monde iso-8859-1
- l'expression régulière est compilée avec une option ignorant la casse.
- les mots ("hits") retournés après un boucle "match" ou "search" peuvent contenir une espace un <tab> ou un <lf> au début. A éliminer dans une application réelle.
- un peu brutal mais je n'ai pas réssi à trouvé mieux

#2 Le 22/06/2006, à 12:18

Kiraa

Re : Expression régulières -> BlackPignour

/(?:^|\n|\s)([bcdfghjklmnpqrstvwxzçÇ][\w-]*[^bcdfghjklmnpqrstvwxzçÇ\W])(?:\s|\n)/i

ça devrait marcher (testé rapidement)
(ici je considère les mots à tiret comme un seul mot , si ce n'est pas voulu , remplacez "[\w-]" par "\w")

Dernière modification par Kiraa (Le 22/06/2006, à 12:22)

Hors ligne

#3 Le 22/06/2006, à 13:01

aleph

Re : Expression régulières -> BlackPignour

>Kiraa

Super, ça a l'air d'être bien foutu. Je vais jeter un oeil approfondi plus tard et posterait une réponse.

#4 Le 22/06/2006, à 16:16

aleph

Re : Expression régulières -> BlackPignour

>Kiraa

Hélas, ta solution ne fonctionne pas.
- un \w ne peut sélectionner un caractère accentué.
- il semble que [\w-]* suivi de [^bcdfghjklmnpqrstvwxzçÇ\W] cause quelques ennuis, j'avais aussi testé l'idée de "non consonne".
- bonne idée d'avoir pensé au trait d'union.
- le  (?:^|\n|\s) est aussi une bonne idée, le \n n'est pas nécessaire il est inclut dans \s.
- pourquoi tester un "white space" avant et après un mot, problème dans une boucle si les mots ne sont sérarés que par une et unique espace.

et pour couronner le tout ma solution n'est pas parfaite.

#5 Le 22/06/2006, à 16:59

Kiraa

Re : Expression régulières -> BlackPignour

-\w chez moi fonctionne avec les caractère accentué
-je voi pas pourquoi
-
-je savais pas , bon à savoir
-oui exact vu que le dernier cara interdit l'espace

(après tout depend de quel type de regex tu utilisé , perso j'utilisai les regexp ruby qui sont je crois très proche si ce n'est simmilaire , des regexp perl)

Dernière modification par Kiraa (Le 22/06/2006, à 17:01)

Hors ligne

#6 Le 22/06/2006, à 21:28

aleph

Re : Expression régulières -> BlackPignour

> Kiraa
-\w chez moi fonctionne avec les caractère accentué

Ce n'est pas le cas avec Python/win2k du moins pour les types string (j'aurais dû le spécifier). Un détour par des types unicode pourrait résoudre le problème, à essayer.

Pour ceux qui sont intéressés, je soumet une variante qui somme tout ne fonctionne pas si mal.

# A partir du string s, za renvoie la liste des mots commençant par une
# consonne et finissant par une voyelle.
# Test, Pentium/600 Mhz, ram/256 Mb, ordre de grandeur
# 0.03-0.05 s pour un texte de 1000 mots.
# +/- linéaire avec le nombre de mots.
def za(s):
    r = []
    consonnes = 'bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZçÇ'
    voyelles = 'aeiouáàâäãéèêëíìîióòôõöúùûüýÿÀÁÂàÄÅÈÉÊËÌÍÎÏÒÓÔÕÙÚÛÜÝœŒæ'
    ponctuation = "'.,;:!?" + '"' #incomplet
    for c in ponctuation:
        t = ' %s ' % c
        s = s.replace(c, t)
    words = s.split()
    for w in words:
        if w[0] in consonnes and w[-1] in voyelles:
            r.append(w)
    return r

#7 Le 22/06/2006, à 21:37

Kiraa

Re : Expression régulières -> BlackPignour

a bas le français et les accents, les us s'en tirent très bien avec les 26 lettres de l'alphabet (je conçois que le dialecte us est moin subtil que le fr (et encore ça reste à vérifier) mais que diable ,qu'est ce que c'est plus pratique et plus facile pour tout le monde....)

Hors ligne

#8 Le 22/06/2006, à 21:54

Black_pignouf

Re : Expression régulières -> BlackPignour

Resalut!

moi j'aurai plutôt vu:

/\b[^aeouiy \n0-9]\w*[aeouiy]\b/

ca dépend des "parseurs de regexp", mais sed -r inteerprète correctement. Enfin je crois, car je n'ai pas trouvé de contre-exemple.


Modif: si, avec des consonnes accentuées au début ou à la fin du mot sad

Dernière modification par Black_pignouf (Le 22/06/2006, à 21:56)

Hors ligne

#9 Le 22/06/2006, à 22:01

aleph

Re : Expression régulières -> BlackPignour

Pour la petite histoire, je me souviens avoir aidé (liste des utilisateurs wxPython) un américain  prof de littérature anglaise qui avait visiblement des problèmes avec les lettres accentuées.
A cette occasion, j'ai appris que le caractère è était très utilisé dans l'ancienne littérature anglaise. De nos jours, on écrit encore "a suède attaché-case", suède étant une variété de peau et non pas le pays.

PS: Un truc qui m'ai venu à l'esprit, ton expression ne règle pas le problème des apostrophes,
ex l'eau.

On ne va pas épiloguer plus longtemps.

#10 Le 22/06/2006, à 22:02

aleph

Re : Expression régulières -> BlackPignour

Errata:
Un truc qui m'est venu à l'esprit (J'ai honte)