python在多行上拆分regexp模式

2024-10-01 04:58:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将regex模式分割成多行,但似乎只提取最后一行中指定的模式。下面的示例说明了问题:

>>> 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')

Tags: renone示例search模式regexprintsre
2条回答

如果您使用\在源代码的行尾继续一个字符串,则放在那里的换行符将是该字符串的一部分。你知道吗

我建议使用以下语法之一:

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在他的回答中提出的,以便能够插入空格字符(如换行符),在编译模式时,regexp模式解析器将跳过这些字符。你知道吗

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

print o.pattern

检查编译的regexp所基于的模式。这会让你知道你的问题所在。你知道吗

使用^{}(或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')
>>>

相关问题 更多 >