gpt4 book ai didi

python - 如何在同一行中分隔多个正则表达式匹配项

转载 作者:行者123 更新时间:2023-11-28 21:59:26 24 4
gpt4 key购买 nike

我正在尝试使用正则表达式来解析以 (key###value) 格式编写的值。该值将始终是一个数字。无论如何,我认为用 python 来做是最简单的,所以这是我正在尝试的一些代码:

import re

line = "(text 1###123)(text 2###345)";

matchObj = re.match( r'\(.*###[0-9]+\)', line)

if matchObj:
print matchObj.group(0) # produces (text 1###123)(text 2###345)
# print matchObj.group(1) # gives an error
else:
print "No match!!"

即使有两个不同的对象匹配我编写的正则表达式,python 还是将它们作为单个字符串返回给我——这不是我想要的。我该如何解决这个问题?

事实上,我真正想要的是将字符串分隔成类似["text 1", "123", "text 2", "345] 这样的东西。所以如果有人有一个简单的实现这一目标的方法,我也将非常感激。

最佳答案

你没有正确的正则表达式,你需要有捕获组。您的示例已将括号转义。这是您实际需要的正则表达式。 * 之后的 ? 使其成为非贪婪的(这样它会在匹配的同时尝试尽可能少的字符)。

\((.*?)###([0-9]+)\)

您当前的正则表达式只有转义括号,因此您实际上没有任何捕获组。要获得所有匹配项,您需要使用 re.findall。但是如果你需要使用两个捕获组,这将产生如下内容:

regex = r'\((.*?)###([0-9]+)\)'
re.findall(regex, "(text 1###123)(text 2###345)") # [("text 1", "123"), ("text 2", "345")]

如果你想把它压扁,也很简单。

关于python - 如何在同一行中分隔多个正则表达式匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16619872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com