2011-07-08 2 views
5

Мне любопытно, почему следующий будет вывод, который был матч:Почему w + соответствует конечной новой строке?

import re 

foo = 'test\n' 
match = re.search('^\w+$', foo) 

if match == None: 
    print "It did not match" 
else: 
    print "Match!" 

новой строки является до конца строки, да? Почему это сопоставление?

+2

'$' «соответствует концу строки * или непосредственно перед символом перевода строки в конце строки *» –

ответ

8

^ и $ означает «начало строки» и «конец строки», а не «начало строки» и «конец строки». Используйте «\A» для «начала строки» и \Z для «конца строки».

+0

В Python это '\ Z' для«конца строки»(в отличие от Perl, который имеет '\ Z' и' \ z'). – MRAB

+0

@MRAB спасибо! изм. –

9

Из документации re от Python.

«$»
сопоставляет конец строки или только перед символом перевода строки в конце строки, и в MULTILINE режим также соответствует перед символом новой строки. foo соответствует как «foo», так и «foobar», в то время как регулярное выражение foo $ соответствует только «foo». Более интересно, ища foo. $ в 'foo1 \ nfoo2 \ n' соответствует 'foo2' обычно, но 'foo1' в режиме MULTILINE; поиск одного $ в 'foo \ n' найдет два (пустых) совпадения: один перед символом новой строки и один в конце строки.

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