Tout en essayant d'en savoir un peu plus sur les expressions régulières, un didacticiel vous a suggéré d'utiliser \b
pour faire correspondre une limite de mot. Cependant, l'extrait de code suivant dans l'interpréteur Python ne fonctionne pas comme prévu:
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Cela aurait dû être un objet de correspondance si quelque chose correspondait, mais c'est le cas None
.
L' \b
expression n'est-elle pas prise en charge dans Python ou est-ce que je l'utilise mal?
re.search(r"\btwo\b", x)
r"\btwo\b"
?\b
.r'\b'
pour que le caractère soit échappé. (ou bien double-échapper\\b
, ce qui est yukky)Réponses:
Pourquoi tu n'essaies pas
Production:
J'ai également oublié de mentionner que vous devriez utiliser des chaînes brutes dans votre code
la source
%
substitution de chaîne est une mauvaise tangente, sans rapport avec cette question particulière.Cela fonctionnera:
re.search(r"\btwo\b", x)
Lorsque vous écrivez
"\b"
en Python, il est un seul caractère:"\x08"
. Soit échappez à la barre oblique inverse comme ceci:ou écrivez une chaîne brute comme celle-ci:
la source
Juste pour expliquer explicitement pourquoi
re.search("\btwo\b", x)
ne fonctionne pas, c'est parce que\b
dans une chaîne Python est un raccourci pour un caractère de retour arrière.Le motif
"\btwo\b"
recherche donc un retour arrière, suivi detwo
, suivi d'un autre retour arrière, que la chaîne que vous recherchez dans (x = 'one two three'
) n'a pas.Pour permettre
re.search
(oucompile
) d'interpréter la séquence\b
comme une limite de mot, échappez aux contre-obliques ("\\btwo\\b"
) ou utilisez une chaîne brute pour créer votre motif (r"\btwo\b"
).la source
Documentation Python
https://docs.python.org/2/library/re.html#regular-expression-syntax
la source