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

Jes*_*ris 5 python regex

我很好奇为什么以下会输出有匹配:

import re

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

if match == None:
  print "It did not match"
else:
  print "Match!"
Run Code Online (Sandbox Code Playgroud)

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

And*_*ark 9

来自Python的re文档.

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


Jer*_*ten 8

^并且$表示"行首"和"行尾",而不是"字符串的开头"和"字符串的结尾".使用\A的"字符串的开始",并\Z为"字符串的结束".