我想作为一个基本的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'
所以确实需要正则表达式
由于
答案 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)']
当然,最简单的数据设置越好。