#1 Le 22/06/2006, à 09: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, à 11: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, à 11:22)
Hors ligne
#3 Le 22/06/2006, à 12: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, à 15: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, à 15: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, à 16:01)
Hors ligne
#6 Le 22/06/2006, à 20: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, à 20: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, à 20: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
Dernière modification par Black_pignouf (Le 22/06/2006, à 20:56)
Hors ligne
#9 Le 22/06/2006, à 21: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, à 21:02
- aleph
Re : Expression régulières -> BlackPignour
Errata:
Un truc qui m'est venu à l'esprit (J'ai honte)