lim*_*imp 2 python regex regex-group
我正在尝试使用正则表达式来解析以某种(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!!"
Run Code Online (Sandbox Code Playgroud)
尽管有两个不同的对象与我编写的正则表达式匹配,但 python 将它们作为单个字符串返回给我——这不是我想要的。我怎样才能解决这个问题?
事实上,我真正想要的是将字符串分成类似["text 1", "123", "text 2", "345]. 因此,如果有人有一个简单的方法来实现这一点,我也将不胜感激。
您没有合适的正则表达式,您需要有捕获组。你的例子已经转义了括号。这是您实际需要的正则表达式。之后?的*使其变得非贪婪(以便它在仍然匹配的情况下尝试采用尽可能少的字符)。
\((.*?)###([0-9]+)\)
Run Code Online (Sandbox Code Playgroud)
您当前的正则表达式仅具有转义括号,因此您实际上没有任何捕获组。要获得所有匹配项,您需要使用re.findall. 但如果您需要使用两个捕获组,这将产生如下所示的结果:
regex = r'\((.*?)###([0-9]+)\)'
re.findall(regex, "(text 1###123)(text 2###345)") # [("text 1", "123"), ("text 2", "345")]
Run Code Online (Sandbox Code Playgroud)
如果你想把它压平,那也很简单。