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

5 投票
2 回答
572 浏览
提问于 2025-04-16 21:08

我很好奇,为什么下面的代码会显示有匹配的结果:

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

撰写回答