为什么 \w+ 匹配尾部换行符?
我很好奇,为什么下面的代码会显示有匹配的结果:
import re
foo = 'test\n'
match = re.search('^\w+$', foo)
if match == None:
print "It did not match"
else:
print "Match!"
换行符是在字符串的末尾之前,对吧?那为什么会匹配呢?
2 个回答
9
来自Python的re
文档。
'$'
这个符号用来匹配字符串的结尾,或者在字符串末尾的换行符之前。在多行模式下,它也可以匹配换行符之前的部分。比如,foo可以匹配‘foo’和‘foobar’,但如果你用正则表达式foo$,它只会匹配‘foo’。更有趣的是,在字符串'foo1\nfoo2\n'中搜索foo.$,正常情况下会匹配到‘foo2’,而在多行模式下会匹配到‘foo1’;如果在'foo\n'中搜索一个单独的$,你会找到两个(空的)匹配:一个是在换行符前面,另一个是在字符串的末尾。
8
^
和 $
的意思是“行的开始”和“行的结束”,而不是“字符串的开始”和“字符串的结束”。如果你想表示“字符串的开始”,可以用 \A
,表示“字符串的结束”可以用 \Z
。