多行正则表达式
我在用正则表达式搜索多行模式时遇到了一些问题。这是我用的一个多行字符串示例:
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正则表达式教程,但很明显我还没有完全理解。
1 个回答
4
我理解得对吗?你期望的结果是在组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 的文档。