Python 为什么\w+;匹配尾随的换行符?

Python 为什么\w+;匹配尾随的换行符?,python,regex,Python,Regex,我很好奇为什么下面会输出匹配的结果: import re foo = 'test\n' match = re.search('^\w+$', foo) if match == None: print "It did not match" else: print "Match!" 换行符在字符串末尾之前,是吗?为什么匹配?^和$表示“行的开始”和“行的结束”,而不是“字符串的开始”和“字符串的结束”。使用\A表示“字符串的开始”,使用\Z表示“字符串的结束”。来自Python文档 “

我很好奇为什么下面会输出匹配的结果:

import re

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

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

换行符在字符串末尾之前,是吗?为什么匹配?

^
$
表示“行的开始”和“行的结束”,而不是“字符串的开始”和“字符串的结束”。使用
\A
表示“字符串的开始”,使用
\Z
表示“字符串的结束”。

来自Python文档

“$”
匹配字符串的结尾或字符串结尾处的换行符之前,并且在多行模式下也匹配换行符之前。foo同时匹配'foo'和'foobar',而正则表达式foo$只匹配'foo'。更有趣的是,在'foo1\nfoo2\n'中搜索foo.$通常与'foo2'匹配,但在多行模式下搜索'foo1';在“foo\n”中搜索单个$将找到两个(空)匹配项:一个在换行符之前,另一个在字符串末尾


$
“匹配字符串的结尾或字符串结尾的换行符之前”,在Python中,“字符串的结尾”是
\Z
(不同于Perl,Perl有
\Z
\Z
)。