Пытаясь узнать немного больше о регулярных выражениях, в руководстве было предложено использовать \b
для сопоставления границы слова. Однако следующий фрагмент в интерпретаторе Python не работает должным образом:
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Это должен был быть объект соответствия, если что-то было найдено, но это так None
.
Это \b
выражение не поддерживается в Python или я использую его неправильно?
re.search(r"\btwo\b", x)
r"\btwo\b"
?\b
.r'\b'
чтобы символ был экранирован. (или дважды экранируйте его\\b
, что противно)Ответы:
Почему бы тебе не попробовать
Вывод:
Также забыл упомянуть, что вы должны использовать необработанные строки в своем коде.
источник
%
подстановкой строк - плохой касательный, не имеющий отношения к этому конкретному вопросу.Это будет работать:
re.search(r"\btwo\b", x)
Когда вы пишете
"\b"
в Python, это один символ:"\x08"
. Либо избегайте обратной косой черты следующим образом:или напишите необработанную строку следующим образом:
источник
Просто чтобы явно объяснить, почему
re.search("\btwo\b", x)
не работает, это потому, что\b
в строке Python есть сокращение для символа возврата.Таким образом, шаблон
"\btwo\b"
ищет пробел, за которымtwo
следует другой пробел, которого нет в строке, которую вы ищете в (x = 'one two three'
).Чтобы разрешить
re.search
(илиcompile
) интерпретировать последовательность\b
как границу слова, либо избегайте обратной косой черты ("\\btwo\\b"
), либо используйте необработанную строку для создания шаблона (r"\btwo\b"
).источник
Документация Python
https://docs.python.org/2/library/re.html#regular-expression-syntax
источник