python - 多行正则表达式

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

最佳答案

我没理解错吗,您期望的结果是第 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

关于python - 多行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250945/

相关文章:

python - 错误 : Got unexpected extra argument (/start-reload. sh) 为 FastAPI docker 设置 Development live reload 时

Python Kivy 语言颜色属性

python - pandas不释放内存?

ruby - 如果空格不存在,则在某个字符前插入空格

javascript - 正则表达式检测字符串同时包含字母和数字

python - 如何将 .pb 文件转换为 .h5。 (Tensorflow 模型到 keras)

python - 用 Python 构建随机列表

javascript - 查找所有字母而不重复正则表达式

Java正则表达式,匹配数学表达式中的变量

c# - 正则表达式匹配前两次出现的大写字母后跟几个小写字母