python在多行上拆分正则表达式模式

时间:2013-10-14 13:20:39

标签: python

我试图将正则表达式模式分成多行,但它似乎只拾取了最后一行中指定的模式。下面的例子说明了问题:

>>> o = re.compile(r'\btext1\b\
... |\btext2\b\
... |\btext3\b')
>>> print o.search(x)
None
>>> x
'text1'
>>> x = 'text3'
>>> print o.search(x)
<_sre.SRE_Match object at 0x025E4CD0>
>>> x = 'text2'
>>> print o.search(x)
None

如何跨多行编写此行:

>>> o = re.compile(r'\btext1\b|\btext2\b|\btext3\b')

2 个答案:

答案 0 :(得分:3)

使用re.VERBOSE(或re.X)标记。

或者将(?x)放在正则表达式中。

>>> import re
>>> o = re.compile(r'''
... \btext1\b |
... \btext2\b |
... \btext3\b
... ''', flags=re.VERBOSE)
>>> o.search('text1')
<_sre.SRE_Match object at 0x0000000001E58578>
>>> o.search('text2')
<_sre.SRE_Match object at 0x0000000002633370>
>>> o.search('text3')
<_sre.SRE_Match object at 0x0000000001E58578>
>>> o.search('text4')
>>>

答案 1 :(得分:0)

如果您使用\在源代码中的行尾添加一个字符串,则放置在那里的换行符将成为该字符串的一部分。

我建议使用其中一种语法:

o = re.compile(r'\btext1\b'
               r'|\btext2\b'
               r'|\btext3\b')

o = re.compile(r'\btext1\b|\btext2\b|\btext3\b')

或使用re.VERBOSE标志作为@falsetru在他的回答中提出能够插入空格字符(如换行符),在编译模式时,正则表达式模式解析器会跳过这些字符。

调试提示:您可以输出o.pattern

print o.pattern

检查编译的正则表达式所基于的模式。这会在你的案例中向你展示问题。