A voir également:
- Aide Regex
- Regex buddy - Télécharger - Édition & Programmation
- Regex mot de passe ✓ - Forum Framework .NET
- Regex Ungreedy ? ✓ - Forum Programmation
- Regex tout sauf - Forum Java
- Scp recursif, regex ✓ - Forum Linux / Unix
5 réponses
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!
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
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
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
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.