2014-01-02 3 views
2
import re 

if re.match(r'1{0}', 'foo').group() == '': 
    print(True) 

Может ли кто-нибудь объяснить, почему условие всегда выполняется?Почему регулярное выражение '1 {0}' всегда совпадает с пустой строкой?

Первый символ может быть что-нибудь вроде: 1{0}, 2{0}, a{0} и т.д.

И почему:

re.match(r'11{0}', 'foo').group() 
# AttributeError: 'NoneType' object has no attribute 'group 
+0

Просто сказать матч 1 ноль раз, что всегда верно, его похоже на то пустое регулярное выражение –

ответ

4

От documentation:

{m} 

Specifies that exactly m copies of the previous RE should be matched; fewer matches cause the entire RE not to match. For example, a{6} will match exactly six 'a' characters, but not five.

Поэтому 1{0} будет соответствовать ровно ноль повторений символа 1. Это то же самое, что и пустое регулярное выражение, и будет соответствовать чему угодно.

+0

Thx, но почему: '>>> re.match (R'11 {0}», 'Foo'). group() # AttributeError: объект 'NoneType' не имеет атрибута 'group' – user3154928

+0

Здесь '{0}' применяется ко второй '1' ** ** **. – NPE

+0

Thx, это понятно! – user3154928

3

Поскольку {0} рассказывает, чтобы соответствовать 0 повторы того, что следует. 0 повторений - пустая строка. Пустая строка всегда совпадает.

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