Python正则表达式匹配很多次

时间:2012-09-20 23:19:47

标签: python regex

我想作为一个基本的Python正则表达式问题。 我有一个数据集

line = "(1,2) (2,3)" 

这可以重复多次,所以行也可以

line = "(1,2) (3,4) (6,5)"

我有一个正则表达式

rx = "(\(\s*\d+\s*,\s*\d+\s*\)\s*){2,}$"

我想要

a = re.match(rx,line).groups();

匹配

('(1,2)','(3,4)'...)

但我只能匹配最后一个(6,5)。我需要最后一笔$因为我不知道我可以有多少括号内输入,否则输入不正确

(1,2),(3,4),(5,6

将通过正则表达式。

任何提示?

编辑: 添加了数据未按照详细格式精确格式化的事实。相反

line= 'blah(1,2) (2,3)blah'

所以确实需要正则表达式

由于

4 个答案:

答案 0 :(得分:6)

看,没有正则表达式的魔力:

>>> "(1,2) (3,4) (6,5)".split()
['(1,2)', '(3,4)', '(6,5)']

答案 1 :(得分:4)

如果你真的想使用正则表达式(我不是正则表达式专家,但它使用了给定的数据):

r = "[\(\d+,\d+\)]{1,}"
c = re.findall(r,line)

或者遵循nightcracker的优秀建议。通常最简单的答案是更好的答案。

编辑:感谢Joran Beasley提出的建议。

答案 2 :(得分:1)

尝试使用re.findall(rx, line)

答案 3 :(得分:0)

请注意,Borgleader的答案会导致:

>>> re.findall(r'[\(\d+,\d+\)]{1,}', '(1, 2),(2,3)')
['(1,', '2),(2,3)']

Joran Beasley对上述案例的回答是:

re.findall(r"(\([^)]*\))", '(1, 2),(2,3)')
['(1, 2)', '(2,3)']

但过于包容:

>>> re.findall(r"(\([^)]*\))", '(1, blah2),(2,3)')
['(1, blah2)', '(2,3)']

如果您只想包含数字,那么:

>>> re.findall(r'\(\s*\d+\s*,\s*\d+\s*\)', '(1, 2),(2,3)')
['(1, 2)', '(2,3)']
>>> re.findall(r'\(\s*\d+\s*,\s*\d+\s*\)', '(1, blah2),(2,3)')
['(2,3)']
>>> re.findall(r'\(\s*\d+\s*,\s*\d+\s*\)', '(1, 2),(2,3) (6, 5')
['(1, 2)', '(2,3)']

如果要删除最终结果中的任何空格:

>>> [x.replace(' ', '') for x in re.findall(r'\(\s*\d+\s*,\s*\d+\s*\)', '(1, 2),(2,3) (6, 5')]
['(1,2)', '(2,3)']

或者如果有标签等:

>>> sp = re.compile('\s')
>>> [sp.sub('', x) for x in re.findall(r'\(\s*\d+\s*,\s*\d+\s*\)', '(1, 2),( 2, 3 ) (6, 5')]
['(1,2)', '(2,3)']

当然,最简单的数据设置越好。