多线正则表达式

时间:2012-02-12 17:29:54

标签: 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)
>>> 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,但很明显我还没有完整的图片。

1 个答案:

答案 0 :(得分: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