我在使用正则表达式搜索多行模式时遇到了一些问题。这是示例多行字符串:
some command [first line]\n
second line \n
yes can have multiple lines\n
\n
something else that I do not care about.
到目前为止,这是我尝试过的:
>>> match = re.match(r"^(.+)\n((.*\n)*)\n",body,re.MULTILINE)
>>> match.groups()
('some command [first line]', 'second line \nyes can have multiple lines\n', 'yes can have multiple lines\n')
我正在寻找 match.group(1) 和 match.group(2),我对它们很满意,但令我烦恼的是我得到了 match.group(3)
我不期望(并且让我认为我的正则表达式不正确)。
此外,我似乎没有正确命名模式..
match = re.match(r"^(.+)\n((?P<bd>.*\n)*)\n",body,re.MULTILINE)
>>> match.group(bd)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'bd' is not defined
我浏览了 Python Regular Expressions from Google , 但很明显我还没有得到完整的图片。
最佳答案
我没理解错吗,您期望的结果是第 3 组而不是第 2 组?
如果这是你的问题,你可以通过在开头放置一个 ?:
来使组不被捕获
re.match(r"^(.+)\n(?:(.*\n)*)\n",body,re.MULTILINE)
有了这个,您只会在结果中得到两个组。
也许我误会了你,你想摆脱第 3 组,然后
re.match(r"^(.+)\n((?:.*\n)*)\n",body,re.MULTILINE)
将是解决方案。
命名组
您可以像这样访问您的命名组
m.group('bd')
您需要给 group()
一个整数或一个字符串作为参数,参见 MatchObject
关于python - 多行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250945/