我很好奇为什么以下会输出匹配:
import re
foo = 'test\n'
match = re.search('^\w+$', foo)
if match == None:
print "It did not match"
else:
print "Match!"
换行符在字符串结尾之前,是吗?为什么这匹配?
答案 0 :(得分:9)
来自Python的re
文档。
<强> '$'强>
匹配字符串的结尾或在字符串末尾的换行符之前,并且在MULTILINE模式下也匹配换行符。 foo 匹配'foo'和'foobar',而正则表达式 foo $ 仅匹配'foo'。更有趣的是,在'foo1 \ nfoo2 \ n'中搜索 foo。$ 通常匹配'foo2',但在MULTILINE模式下匹配'foo1';在'foo \ n'中搜索单个 $ 会找到两个(空)匹配:一个在换行符之前,一个在换行符结尾。
答案 1 :(得分:8)
^
和$
表示“行首”和“行尾”,而不是“字符串的开头”和“字符串的结尾”。使用\A
表示“字符串开头”,使用\Z
表示“结束字符串”。