2014-08-11 7 views
1

Учитывая этот код:Python-Regular Expression

match = re.search(r'b\w+', 'foobar') => found, match.group() == "bar" 

Я думаю, что матч группа должна быть «Foobar», так как нет алфавитно-цифровых символов, которые появляются перед или позади него. Почему это не так?

ответ

4

Поскольку он будет обрабатывать b\w+ как любой символ, который начинается с b, и будет соответствовать bar вместо всего слова.

Использовать \b как граница слова.

Изменить

b\w+ 

To:

\b\w+ 

Использование ^ и $, чтобы соответствовать всей линии, например ^foo$ будет соответствовать foo только.

  • ^ позиция утверждает в начале строки
  • foo соответствует символам Foo буквально (чувствительно к регистру)
  • $ положения утверждают в конце строки

Проверьте свой шаблон регулярного выражения в Интернет по адресу regex101.

+0

ОК, я понял. Другой вопрос связан с docs.python.org r '\ bfoo \ b' соответствует 'foo', 'foo.', '(Foo)', 'bar foo baz', но не 'foobar' или 'foo3'. Однако это работает для «3foo», но не «foo3». Я не совсем понимаю выражение границы слова в регулярном выражении. – user3718905

+0

Закройте его внутри '^' и '$' для соответствия всей строке. '^ foo $' Здесь [demo] (http://regex101.com/r/oS9pR2/3), и в этом случае нет необходимости использовать границу слова. Для кода нажмите на * Генератор кода * на демо-сайте. – Braj

0

re.search() перемещается вверх по строке, которая ищет шаблон (в отличие от re.match(), который должен совпадать с первым символом).