Python regex错误匹配尾部换行符

2024-05-14 12:54:55 发布

您现在位置:Python中文网/ 问答频道 /正文

带有结束锚点($)的正则表达式在匹配时完全忽略尾部换行符的存在。在

例如

import re

regex = re.compile(r'^$')

text = "\n"
print regex.match(text)

上面的代码段将与包含“\n”的文本匹配。由于上面的正则表达式在开始和结束锚定之间没有任何内容,所以我假设它应该只匹配空字符串。在

有什么办法可以改变这种行为吗?在

p.S。 上面的代码是一个简化的正则表达式来说明这个问题。我使用的实际正则表达式是:

^{pr2}$

它还匹配包含尾随换行符的文本。在


Tags: 字符串text文本importre内容代码段match
1条回答
网友
1楼 · 发布于 2024-05-14 12:54:55

使用\Z匹配缓冲区的结尾,\A匹配缓冲区的开始。在

更新:为什么^$没有做你想要的,是因为匹配$的规则是:

  • 如果缓冲区结束于换行符$正好在最后一个换行符之前匹配
  • 否则$匹配缓冲区的结尾

如果regex是用re.MULTLINE编译的,那么$也将在任何内部换行之前匹配。在

下面是一些代码来说明这一点:

import re

def showit(r, inp):
  ms = r.finditer(inp)
  for i,m in enumerate(ms):
    print "  match", i, " start:", m.start(0), " end:", m.end(0)
  print ""

print "regex x$ against x\\nx"
showit(re.compile("x$"), "x\nx")

print "regex x$ against x\\nx\\n"
showit(re.compile("x$"), "x\nx\n")

print "regex x$ re.MULTILINE against x\\nx"
showit(re.compile("x$", re.MULTILINE), "x\nx")

输出:

^{pr2}$

相关问题 更多 >

    热门问题