Python 多行正则表达式

Python 多行正则表达式,python,regex,Python,Regex,我在使用正则表达式搜索多行模式时遇到一些问题。以下是多行字符串示例: 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) >>>

我在使用正则表达式搜索多行模式时遇到一些问题。以下是多行字符串示例:

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)
,这是我不期望的(这让我觉得我的regexp不正确)

此外,我似乎没有得到正确的命名模式

 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
match=re.match(r“^(+)\n((?P.*\n)*)\n”,正文,re.MULTILINE)
>>>匹配组(bd)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“bd”

我看了一遍,但很明显,我还没有完全了解情况。

我是否理解你的意思,你期望的结果是在第3组而不是第2组

如果这是您的问题,您可以在开始时这样放置一个
?:
,使组不被捕获

re.match(r"^(.+)\n(?:(.*\n)*)\n",body,re.MULTILINE)
m.group('bd')
这样,结果中只会有两组

也许我误解了你,你想摆脱第三组,那么

re.match(r"^(.+)\n((?:.*\n)*)\n",body,re.MULTILINE)
这将是解决办法

命名组

您可以这样访问您的命名组

re.match(r"^(.+)\n(?:(.*\n)*)\n",body,re.MULTILINE)
m.group('bd')
您需要给
group()
一个整数或字符串作为参数,请参阅