当 re.VERBOSE 包含有意义的空格时,如何编写与 re.VERBOSE 一起使用的模式?
How to write patterns for use with re.VERBOSE when they contain meaningful whitespace?
当添加 re.VERBOSE 时,包含有意义空格的正则表达式会中断,显然是因为 re.VERBOSE 'helpfully' 魔法消除了 'Issue Summary' 内的(有意义的)空格,以及所有蹩脚的无意义的空白(例如(多行)模式中的填充和换行符)。 (我对多行使用 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'\ '
和 '[ ]'
都匹配一个 space 字符(不是任何白色 space,只有一个实际的 space)。请注意,如果前面没有 r
,则反斜杠字符需要加倍,即 \
.
当添加 re.VERBOSE 时,包含有意义空格的正则表达式会中断,显然是因为 re.VERBOSE 'helpfully' 魔法消除了 'Issue Summary' 内的(有意义的)空格,以及所有蹩脚的无意义的空白(例如(多行)模式中的填充和换行符)。 (我对多行使用 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'\ '
和 '[ ]'
都匹配一个 space 字符(不是任何白色 space,只有一个实际的 space)。请注意,如果前面没有 r
,则反斜杠字符需要加倍,即 \
.