Aide Regex
Fermé
Zetud
Messages postés
3
Date d'inscription
mardi 15 décembre 2009
Statut
Membre
Dernière intervention
15 décembre 2009
-
15 déc. 2009 à 00:36
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 16 déc. 2009 à 14:04
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 16 déc. 2009 à 14:04
A voir également:
- Aide Regex
- Regex buddy - Télécharger - Édition & Programmation
- Regex tout sauf - Forum Java
- Regex ne commence pas par - Forum Programmation
- RegEx Java - Matcher tout sauf ce qui ce termine par ... ✓ - Forum Java
- Regex caractères accentués - Forum Programmation
5 réponses
H0gS
Messages postés
266
Date d'inscription
dimanche 2 décembre 2007
Statut
Contributeur
Dernière intervention
10 septembre 2012
36
15 déc. 2009 à 00:42
15 déc. 2009 à 00:42
N.B.
Attention! Veuillez prêter une attention particulière aux titres de vos futures discussions, car celui que vous avez attribué à cette discussion est inadéquat et contraire à la charte de CCM (Comment Ça Marche). Les termes: aide, svp, please, etc... son à évité, car peu importe le problème, la communauté de CCM tentera de le résoudre. Il est donc inutile de demander de l'aide dans votre titre.
Pour plus de renseignements, consultez la charte de CCM.
Bonne fin de journée!
Attention! Veuillez prêter une attention particulière aux titres de vos futures discussions, car celui que vous avez attribué à cette discussion est inadéquat et contraire à la charte de CCM (Comment Ça Marche). Les termes: aide, svp, please, etc... son à évité, car peu importe le problème, la communauté de CCM tentera de le résoudre. Il est donc inutile de demander de l'aide dans votre titre.
Pour plus de renseignements, consultez la charte de CCM.
Bonne fin de journée!
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
15 déc. 2009 à 02:28
15 déc. 2009 à 02:28
Bonsoir,
Il serait bien que tu fasses preuve d’un peu plus de rigueur.
Dans "La ville est fondé" il y a une majuscule en tête.
Dans [^\(de\)] la ville est fondé , il n’y en a pas et il y a un blanc devant.
Pour trouver les “de la ville est fondé“ sans qu’il y ait “de “ devant, il faut utiliser une “negative lookbehind assertion“
“(?<!de )de la ville est fondé“
Du moins est-ce ainsi qu’on écrit en Python.
https://docs.python.org/3/library/re.html#module-re
Il serait bien que tu fasses preuve d’un peu plus de rigueur.
Dans "La ville est fondé" il y a une majuscule en tête.
Dans [^\(de\)] la ville est fondé , il n’y en a pas et il y a un blanc devant.
Pour trouver les “de la ville est fondé“ sans qu’il y ait “de “ devant, il faut utiliser une “negative lookbehind assertion“
“(?<!de )de la ville est fondé“
Du moins est-ce ainsi qu’on écrit en Python.
https://docs.python.org/3/library/re.html#module-re
Zetud
Messages postés
3
Date d'inscription
mardi 15 décembre 2009
Statut
Membre
Dernière intervention
15 décembre 2009
15 déc. 2009 à 23:44
15 déc. 2009 à 23:44
Mea culpa : je cherche bien "la ville est fondé", sans la majuscule.
Je ne comprend pas le problème de blanc que tu évoques. Dans ma proposition ( [^\(de\)] la ville est fondé ), je mets [^ ] pour exclure ce qu'il y a après le ^, \(de\) pour considérer "de" comme une chaine (à exclure), puis un espace, puis la "ville est fondée". Mais ça ne marche pas
Le script que tu proposes ne marche pas non plus ; il trouve les "de la ville est fondé", alors que je cherche justement à exclure les cas où "la ville est fondé" est précédé de "de"... Par exemple, je voudrais trouver les "mais la ville est fondé".
Zetud
Je ne comprend pas le problème de blanc que tu évoques. Dans ma proposition ( [^\(de\)] la ville est fondé ), je mets [^ ] pour exclure ce qu'il y a après le ^, \(de\) pour considérer "de" comme une chaine (à exclure), puis un espace, puis la "ville est fondée". Mais ça ne marche pas
Le script que tu proposes ne marche pas non plus ; il trouve les "de la ville est fondé", alors que je cherche justement à exclure les cas où "la ville est fondé" est précédé de "de"... Par exemple, je voudrais trouver les "mais la ville est fondé".
Zetud
Zetud
Messages postés
3
Date d'inscription
mardi 15 décembre 2009
Statut
Membre
Dernière intervention
15 décembre 2009
15 déc. 2009 à 23:54
15 déc. 2009 à 23:54
Ca marche !
La bonne syntaxe est : (?<!de )la ville est fondé
Tu avais proposé un double "de", mais ta syntaxe (?<!...) était la bonne. Elle n'était pas indiquée dans le site sur lequel je m'auto-forme.
Merci de ton aide.
Zetud
La bonne syntaxe est : (?<!de )la ville est fondé
Tu avais proposé un double "de", mais ta syntaxe (?<!...) était la bonne. Elle n'était pas indiquée dans le site sur lequel je m'auto-forme.
Merci de ton aide.
Zetud
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
16 déc. 2009 à 14:04
16 déc. 2009 à 14:04
Bonjour
Quand je lis
«Je cherche les "La ville est fondé" sauf quand cette expression est précédée de "de".»
je vois en pensée
"de""La ville est fondé"
c’est à dire
"deLa ville est fondé"
alors que la RE que tu proposes comporte un blanc et une majuscule qui ne sont pas dans "de""La ville est fondé"
C’est idiot, je te l’accorde, je peux faire un petit effort correctif en pensée.
Mais la lecture des forums demande en permanence ce genre de petits efforts. Ça finit par être pénible
Et puis c’est la ville est fondéE. Avec un E.
Il y a plusieurs choses qui n'allaient pas dans ta RE.
[^\(de\)] la ville est fondé
Un entre-crochets [] représente plusieurs caractères mais 1 seule position. Les crochets permettent de spécifier un ensemble de caractères autorisés pour la position à laquelle l’entre-crochets se trouve dans la RE.
Si on veut répéter l’indication d’autorisation d’un de ces caractères de ce même ensemble pour une succession de positions, il faut mettre un + ou {4} etc
Il faut se représenter [aun#,y] comme [a OU u OU n OU # OU , OU y]
Les caractères spéciaux perdent leur spécialité entre crochets.
Les parenthèses ) et ( n’ont donc pas leur signification de définition d’un groupe quand elle sont dans un entre-crochet.
\ est un caractère d’échappement, aussi bien pour les chaînes que pour les RE.
De plus, dans une RE, \ a une action d’échappement sur un caractère qui le suit quand celui-ci s’y prête, mais si ce n’est pas le cas, \ devient comme transparent , c’est alors comme s’il n’était pas là.
C’est ce qui fait que le code suivant
sort un résultat ’isso’.
Le o n’étant pas échappable, \o équivaut à o et seul le premier mot contient isso
La dualité de \ et cette caractéristique sont sources de nombreux problèmes de manipulation et de compréhension de \ ; il y a des choses qui m’échappent (!) encore à son sujet.
Mais on peut quand même dire ce qui suit à propos de la RE que tu avais écrite:
En situation normale dans une RE,
\. représente le seul caractère ’point’, alors qu’un point seul . représente n’importe quel caractère sauf \n.
\( représente une parenthèse, alors que ( toute seule ouvre un groupe
Mais entre crochets, . représente seulement un point et ( représente seulement une parenthèse.
Ainsi
sort le résultat iss(o à partir du deuxième mot.
Si maintenant on rajoute un \ dans la RE, le résultat ne change pas:
sort encore iss(o
Pour les raisons suivantes:
- ( n’a pas de caractère spécial entre crochets, il n’est donc pas échappable
- \ par contre conserve son caractère spécial d’échappateur même entre crochets
- or, quand \ est devant un caractère non échappable dans une RE, il est comme transparent
Ta RE [^\(de\)] la ville est fondé est donc équivalente à
[^(de)] la ville est fondé
Compte tenu qu’un entre-crochets représente un seule position et qu’il y a ^, ta RE exprime que tu cherches à éviter les chaînes “ la ville est fondé“ précédées d’une lettre “d“ ou d’une lettre“e“ ou d’une parenthèse gauche“(“ ou droite “)“
On pourrait penser indiquer que ce sont 2 positions que l’on veut préciser devant “ la ville est fondé“ et le faire avec
[^(de)]{2} la ville est fondé
Le problème est qu’on empêche avec une telle RE toutes les possibilités suivantes
“de la ville est fondé“
“ed la ville est fondé“
“ee la ville est fondé“
“dd la ville est fondé“
“d( la ville est fondé“
“(e la ville est fondé“
“)( la ville est fondé“
“d) la ville est fondé“
etc
D’une manière générale, une telle complémentation par crochets empêche non seulement un mot mais toutes les combinaisons des caractères spécifiés entre crochets.
C’est pour cette raison que les “look ahead’ et “look behind “assertins ont été mises en place dans les moteurs de regex.
Peux tu me dire quel est le site que tu utilises ? Savoir quels sites sont les moins bon est m’intéresse.
Quand je lis
«Je cherche les "La ville est fondé" sauf quand cette expression est précédée de "de".»
je vois en pensée
"de""La ville est fondé"
c’est à dire
"deLa ville est fondé"
alors que la RE que tu proposes comporte un blanc et une majuscule qui ne sont pas dans "de""La ville est fondé"
C’est idiot, je te l’accorde, je peux faire un petit effort correctif en pensée.
Mais la lecture des forums demande en permanence ce genre de petits efforts. Ça finit par être pénible
Et puis c’est la ville est fondéE. Avec un E.
Il y a plusieurs choses qui n'allaient pas dans ta RE.
[^\(de\)] la ville est fondé
Un entre-crochets [] représente plusieurs caractères mais 1 seule position. Les crochets permettent de spécifier un ensemble de caractères autorisés pour la position à laquelle l’entre-crochets se trouve dans la RE.
Si on veut répéter l’indication d’autorisation d’un de ces caractères de ce même ensemble pour une succession de positions, il faut mettre un + ou {4} etc
Il faut se représenter [aun#,y] comme [a OU u OU n OU # OU , OU y]
Les caractères spéciaux perdent leur spécialité entre crochets.
Les parenthèses ) et ( n’ont donc pas leur signification de définition d’un groupe quand elle sont dans un entre-crochet.
\ est un caractère d’échappement, aussi bien pour les chaînes que pour les RE.
De plus, dans une RE, \ a une action d’échappement sur un caractère qui le suit quand celui-ci s’y prête, mais si ce n’est pas le cas, \ devient comme transparent , c’est alors comme s’il n’était pas là.
C’est ce qui fait que le code suivant
ch = 'saucissonage sauciss\onage fin' pat = re.compile('(iss\o)nage') for m in pat.finditer(ch): print m.group(1)
sort un résultat ’isso’.
Le o n’étant pas échappable, \o équivaut à o et seul le premier mot contient isso
La dualité de \ et cette caractéristique sont sources de nombreux problèmes de manipulation et de compréhension de \ ; il y a des choses qui m’échappent (!) encore à son sujet.
Mais on peut quand même dire ce qui suit à propos de la RE que tu avais écrite:
En situation normale dans une RE,
\. représente le seul caractère ’point’, alors qu’un point seul . représente n’importe quel caractère sauf \n.
\( représente une parenthèse, alors que ( toute seule ouvre un groupe
Mais entre crochets, . représente seulement un point et ( représente seulement une parenthèse.
Ainsi
ch = 'saucissonage sauciss(onage fin' pat = re.compile('([iss(o]{5})nage') for m in pat.finditer(ch): print m.group(1)
sort le résultat iss(o à partir du deuxième mot.
Si maintenant on rajoute un \ dans la RE, le résultat ne change pas:
ch = 'saucissonage sauciss(onage fin' pat = re.compile('([iss\(o]{5})nage') for m in pat.finditer(ch): print m.group(1)
sort encore iss(o
Pour les raisons suivantes:
- ( n’a pas de caractère spécial entre crochets, il n’est donc pas échappable
- \ par contre conserve son caractère spécial d’échappateur même entre crochets
- or, quand \ est devant un caractère non échappable dans une RE, il est comme transparent
Ta RE [^\(de\)] la ville est fondé est donc équivalente à
[^(de)] la ville est fondé
Compte tenu qu’un entre-crochets représente un seule position et qu’il y a ^, ta RE exprime que tu cherches à éviter les chaînes “ la ville est fondé“ précédées d’une lettre “d“ ou d’une lettre“e“ ou d’une parenthèse gauche“(“ ou droite “)“
On pourrait penser indiquer que ce sont 2 positions que l’on veut préciser devant “ la ville est fondé“ et le faire avec
[^(de)]{2} la ville est fondé
Le problème est qu’on empêche avec une telle RE toutes les possibilités suivantes
“de la ville est fondé“
“ed la ville est fondé“
“ee la ville est fondé“
“dd la ville est fondé“
“d( la ville est fondé“
“(e la ville est fondé“
“)( la ville est fondé“
“d) la ville est fondé“
etc
D’une manière générale, une telle complémentation par crochets empêche non seulement un mot mais toutes les combinaisons des caractères spécifiés entre crochets.
C’est pour cette raison que les “look ahead’ et “look behind “assertins ont été mises en place dans les moteurs de regex.
Peux tu me dire quel est le site que tu utilises ? Savoir quels sites sont les moins bon est m’intéresse.