smc*_*mci 6 python regex flags whitespace
添加 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 上的一个有用的 docbug 捕获。一旦我在此处就正确的解决方案达成共识,我就会将其归档)
如果re.VERBOSE使用,那么我认为除了更改正则表达式字符串之外别无选择。但是,我会建议以下之一:
r'abc\ def'
或者:
r'abc[ ]def'
既r'\ '和'[ ]'匹配单个空格字符(未任何空白,仅实际空间)。请注意,如果没有r前面,反斜杠字符需要加倍,即\\.