2013-09-02 3 views
2

Почему эта строка соответствует шаблону?Почему эта строка соответствует регулярному выражению?

pattern = """ 
    ^Page \d of \d$| 
    ^Group \d Notes$| 
    ^More word lists and tips at http://wwwmajortests.com/word-lists$| 
    """ 
    re.match(pattern, "stackoverflow", re.VERBOSE) 

Согласно мне, он должен соответствовать строкам типа «Страница 1 из 1» или «Примечания группы 1».

+1

из-за хвоста '' 'возможно? – akonsu

ответ

9

В вашем регулярном выражении, там задний |:

# ^More word lists and tips at http://wwwmajortests.com/word-lists$| 
#                ^

Пустой шаблон соответствует любой строке:

>>> import re 
>>> re.match('abc|', 'abc') 
<_sre.SRE_Match object at 0x7fc63f3ff3d8> 
>>> re.match('abc|', 'bbbb') 
<_sre.SRE_Match object at 0x7fc63f3ff440> 

Итак, снимите заднюю |.

BTW, вам не нужен ^ becasue re.match проверяет соответствие только в начале строки.

И, я рекомендую использовать необработанные строки (r'....'), чтобы правильно бежать назад.


ДОПОЛНИТЕЛЬНОЕ ПРИМЕЧАНИЕ

\d матчи только одна цифра. Используйте \d+, если вы также хотите сопоставить несколько цифр.

Смежные вопросы