在python中包含捕获组的替代方法

时间:2014-08-23 15:38:16

标签: python regex

目前我有一个字符串,我想提取括号的内容。 这是字符串:

>>>string = "djdjfksjlfsdk (600m 36.57) fhksjhfhsdhfkjhks"

这是我正在使用的正则表达式,它产生以下结果:

>>>regex_output = re.findall(r'\((\d{3,4})m|([\d.:]+\d)\)',string)
>>>regex_output
[('600', ''), ('', '36.57')]

据我所知,空字符串是由我的正则表达式中的嵌套捕获组引起的。 我想要的是两个变量的列表:

['600','36.57']

我可以从我当前的输出中创建新列表,但这会破坏使用正则表达式的目的。那么有没有办法通过修改我的正则表达式来实现我想要的输出。感谢

2 个答案:

答案 0 :(得分:1)

>>> import re
>>> s = "djdjfksjlfsdk (600m 36.57) fhksjhfhsdhfkjhks"

您可以搜索封闭的()

>>> re.search('\((.*?)\)',s).group(1)
'600m 36.57'

然后拆分'm '个字符

>>> re.search('\((.*?)\)',s).group(1).split('m ')
['600', '36.57']

答案 1 :(得分:0)

你也可以尝试下面的代码,它使用正面后卫来匹配(之后的数字,并且它使用前瞻来匹配之前的{十进制数)

>>> import re
>>> s = "djdjfksjlfsdk (600m 36.57) fhksjhfhsdhfkjhks"
>>> m = re.findall(r'(?<=\()\d+|\d+[.:]\d+(?=\))', s, re.M)
>>> m
['600', '36.57']