我在使用正则表达式搜索多行模式时遇到了一些麻烦。以下是示例多行字符串:
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,但很明显我还没有完整的图片。
答案 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