Pai*_*Air 1 python regex python-2.7
带有结束锚($)的正则表达式在匹配时完全忽略尾随换行符的存在.
防爆.
import re
regex = re.compile(r'^$')
text = "\n"
print regex.match(text)
Run Code Online (Sandbox Code Playgroud)
上面的代码段将匹配包含"\n"的文本.由于上面的正则表达式在开始和结束锚点之间没有任何内容,我认为它应该只匹配空字符串.
有没有办法解决这种行为?
PS上面的代码是一个简化的正则表达式来说明问题.我正在使用的实际正则表达式是:
re.compile(r'^\S(?:\S| (?!\s)){0,199}$(?<=\S)')
Run Code Online (Sandbox Code Playgroud)
这也匹配包含尾随换行符的文本.
使用\Z
该缓冲区的末尾匹配,并且\A
在缓冲区的开头相匹配.
更新:之所以^$
没有做你想要的是因为匹配规则$
是:
$
在最后换行符之前匹配$
匹配缓冲区的末尾如果编译正则表达式,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")
Run Code Online (Sandbox Code Playgroud)
输出:
regex x$ against x\nx
match 0 start: 2 end: 3
regex x$ against x\nx\n
match 0 start: 2 end: 3
regex x$ re.MULTILINE against x\nx
match 0 start: 0 end: 1
match 1 start: 2 end: 3
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
155 次 |
最近记录: |