当使用re.VERBOSE时,包含有意义空格的正则表达式会出现错误,显然是因为re.VERBOSE“有用地”魔法般地消除了“问题摘要”中所有有意义的空格,以及所有恶心的非有意义空格(例如(多行)模式内部的填充和换行符)。 (我的多行正则表达式使用re.VERBOSE是不可协商的 - 这实际上是一个巨大的多行正则表达式的巨大简化,其中re.VERBOSE仅仅是为了保持理智而必需的。)
import re
re.match(r'''Issue Summary.*''', 'Issue Summary: fails''', re.U|re.VERBOSE)
# No match!
re.match(r'''Issue Summary.*''', 'Issue Summary: passes''', re.U)
<_sre.SRE_Match object at 0x10ba36030>
re.match(r'Issue Summary.*', 'Issue Summary: passes''', re.U)
<_sre.SRE_Match object at 0x10b98ff38>
有没有更好的方法来编写支持re.VERBOSE的正则表达式模式,包含有意义的空格,而不是在模式中用 '\s' 或 '.' 替换每个实例,这种写法不仅丑陋,而且不直观且难以自动化处理?
re.match(r'Issue\sSummary.*''', 'Issue Summary: fails', re.VERBOSE)
<_sre.SRE_Match object at 0x10ba36030>
re.match(r'Issue.Summary.*''', 'Issue Summary: fails', re.VERBOSE)
<_sre.SRE_Match object at 0x10b98ff38>
(顺便说一句,这是Python 2和3中一个有用的文档错误。我会在这里得到共识后提交它)
r'''abc'''
只是r'' + 'abc' + ''
或者'abc'
。因为r
在初始空字符串后就结束了,所以它甚至没有起到作用。 - Tom Karzesr"""this is right"""
,而不是r'''this is wrong'''
。请参见如何在Python中正确编写原始多行字符串?。我的误解是因为其他人多年来一直在传播同样的错误。相关链接:Python regex compile (with re.VERBOSE) not working。 - smci