当它们包含有意义的空白时,如何编写与re.VERBOSE一起使用的模式?

时间:2017-11-17 00:28:18

标签: python regex whitespace flags

当添加re.VERBOSE时,包含有意义空格的正则表会中断,显然是因为re.VERBOSE'魔术师消除了(有意义的)空白内部的问题摘要'以及所有蹩脚的无意义的空白(例如(多行)模式中的填充和换行)。 (我对multiline的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友好模式,而不是用&#39; \ s&#39;替换模式中的每个实例。或者&#39;。&#39;,这不仅是丑陋的,而且是反直觉的,也是一种自动化的痛苦?

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注释。一旦我就这个正确的解决方案达成共识,我就会提交它。)

1 个答案:

答案 0 :(得分:1)

如果使用re.VERBOSE,那么我认为除了更改正则表达式字符串之外别无选择。但是,我会建议以下之一:

r'abc\ def'

或:

r'abc[ ]def'

r'\ ''[ ]'都匹配单个空格字符(不是任何空格,只是实际空格)。请注意,如果前面没有r,则需要将反斜杠字符加倍,即\\