多行正则表达式

3
我遇到了一些困难,在使用正则表达式搜索多行模式时。以下是示例多行字符串:
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

我阅读了Google的Python正则表达式,但显然我还没有完全掌握。

1个回答

4
我理解你的意思是,你期望的结果在第三组而不是第二组? 如果是这个问题,你可以通过在开头加上 ?: 来使分组不捕获。
re.match(r"^(.+)\n(?:(.*\n)*)\n",body,re.MULTILINE)
“使用此方法,您只会得到两组结果。 也许我误解了您的意思,您希望排除第三个组,那么...”
re.match(r"^(.+)\n((?:.*\n)*)\n",body,re.MULTILINE)
将文本翻译成中文:

将是解决方案。

命名分组

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

m.group('bd')
你需要给group()方法传入一个整数或字符串作为参数,参考MatchObject

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,