Python Language Correspond à une expression uniquement dans des emplacements spécifiques


Exemple

Souvent, vous souhaitez faire correspondre une expression uniquement à des endroits spécifiques (les laissant intacts dans d’autres, c’est-à-dire). Considérons la phrase suivante:

An apple a day keeps the doctor away (I eat an apple everyday).

Ici, la "pomme" se produit deux fois, ce qui peut être résolu avec des verbes de contrôle appelés " backtracking" qui sont supportés par le nouveau module regex . L'idée est la suivante:

forget_this | or this | and this as well | (but keep this)

Avec notre exemple Apple, ce serait:

import regex as re
string = "An apple a day keeps the doctor away (I eat an apple everyday)."
rx = re.compile(r'''
    \([^()]*\) (*SKIP)(*FAIL)  # match anything in parentheses and "throw it away"
    |                          # or
    apple                      # match an apple
    ''', re.VERBOSE)
apples = rx.findall(string)
print(apples)
# only one

Ceci ne correspond à "apple" que s'il peut être trouvé en dehors des parenthèses.


Voici comment cela fonctionne:
  • En regardant de gauche à droite , le moteur regex consomme tout à gauche, le (*SKIP) agit comme une "assertion toujours vraie". Ensuite, il échoue correctement (*FAIL) et les backtracks.
  • Maintenant, il arrive au point de (*SKIP) de droite à gauche (alias en revenant en arrière) où il est interdit d'aller plus loin vers la gauche. Au lieu de cela, on dit au moteur de jeter tout ce qui est à gauche et de sauter au point où le (*SKIP) été invoqué.