Während Sie versuchen, etwas mehr über reguläre Ausdrücke zu erfahren, wurde in einem Lernprogramm vorgeschlagen, dass Sie das verwenden können \b
, um eine Wortgrenze abzugleichen. Das folgende Snippet im Python-Interpreter funktioniert jedoch nicht wie erwartet:
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Es hätte ein Übereinstimmungsobjekt sein sollen, wenn etwas übereinstimmte, aber es ist None
.
Wird der \b
Ausdruck in Python nicht unterstützt oder verwende ich ihn falsch?
re.search(r"\btwo\b", x)
r"\btwo\b"
?\b
.r'\b'
damit das Zeichen maskiert wird. (oder es doppelt entkommen\\b
, was yukky ist)Antworten:
Warum versuchst du es nicht?
Ausgabe:
Auch vergessen zu erwähnen, sollten Sie rohe Zeichenfolgen in Ihrem Code verwenden
quelle
%
Substitution zu erstellen, ist eine schlechte Tangente, die für diese spezielle Frage irrelevant ist.Das wird funktionieren:
re.search(r"\btwo\b", x)
Wenn Sie
"\b"
in Python schreiben , handelt es sich um ein einzelnes Zeichen :"\x08"
. Entkomme dem Backslash wie folgt:oder schreiben Sie eine rohe Zeichenfolge wie folgt:
quelle
Nur um explizit zu erklären, warum
re.search("\btwo\b", x)
dies nicht funktioniert, liegt es daran, dass\b
eine Python-Zeichenfolge eine Abkürzung für ein Rücktastezeichen ist.Das Muster
"\btwo\b"
sucht also nach einer Rücktaste, gefolgt von einertwo
weiteren Rücktaste, die die Zeichenfolge, in der Sie suchen (x = 'one two three'
), nicht hat.Um zuzulassen
re.search
(odercompile
), die Sequenz\b
als Wortgrenze zu interpretieren , maskieren Sie entweder die Backslashes ("\\btwo\\b"
) oder verwenden Sie eine rohe Zeichenfolge, um Ihr Muster zu erstellen (r"\btwo\b"
).quelle
Python-Dokumentation
https://docs.python.org/2/library/re.html#regular-expression-syntax
quelle