Подтвердить что ты не робот

Поддерживает ли модуль Python re word границы слов (\ b)?

При попытке узнать немного больше о регулярных выражениях, учебник предположил, что вы можете использовать \b для соответствия границе слова. Однако следующий фрагмент в интерпретаторе Python работает не так, как ожидалось:

>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)

y должен был быть объектом совпадения, если что-то было сопоставлено, но это None. Является ли выражение \b не поддерживаемым в Python или я использую его неправильно?

спасибо за любую помощь.

4b9b3361

Ответ 1

Почему бы вам не попробовать

word = 'two'
re.compile(r'\b%s\b' % word, re.I)

Вывод:

>>> word = 'two'
>>> k = re.compile(r'\b%s\b' % word, re.I)
>>> x = 'one two three'
>>> y = k.search( x)
>>> y
<_sre.SRE_Match object at 0x100418850>

Также забыл упомянуть, что вы должны использовать необработанные строки в своем коде

>>> x = 'one two three'
>>> y = re.search(r"\btwo\b", x)
>>> y
<_sre.SRE_Match object at 0x100418a58>
>>> 

Ответ 2

Это будет работать: re.search(r"\btwo\b", x)

Когда вы пишете "\b" в Python, это один символ: "\x08". Удалите обратную косую черту так:

"\\b"

или напишите необработанную строку следующим образом:

r"\b"

Ответ 3

Документация Python

https://docs.python.org/2/library/re.html#regular-expression-syntax

\ Ь​​p >

Соответствует пустой строке, но только в начале или конце слова. Слово определяется как последовательность буквенно-цифровых символов или символов подчеркивания, поэтому конец слова обозначается пробелом или буквенным или несимвольным символом. Обратите внимание, что формально \b определяется как граница между символом \w и a\W (или наоборот) или между \w и началом/концом строки, поэтому точный набор символов, считающийся буквенно-цифровым, зависит от по значениям флагов UNICODE и LOCALE. Например, r '\ bfoo\b' соответствует 'foo', 'foo.', '(Foo)', 'bar foo baz', но не 'foobar' или 'foo3'. Внутри диапазона символов \b представляет символ обратного пробела для совместимости с строковыми литералами Pythons.