2016-04-29 218 views
1
import re 
pattern = re.compile(r"(\d{3})+$") 
print pattern.match("123567").groups() 

输出结果:Python的正则表达式?

('567',) 

我需要的结果是('123','567')(\d{3})只能输出最后一组,但我想输出每一组。

+0

删除'$'和也'+'从正则表达式.. – rock321987

+0

're.findall( “\ d {3}”,“123567 “)' – ozgur

+0

当我删除'$'时,结果是一样的。 – lens

回答

2

我做它一点点Python的方式

解决方案1 ​​

Python代码

p = re.compile(r'(?<=\d)(?=(?:\d{3})+$)') 
test_str = "2890191245" 
tmp = [x.start() for x in re.finditer(p, test_str)] 
res = [test_str[0: tmp[0]]] + [(test_str[tmp[i]: tmp[i] + 3]) for i in range(len(tmp))] 

Ideone Demo

小号olution 2(一个衬垫)

print(re.sub("(?<=\d)(?=(\d{3})+$)", ",", test_str).split(",")) 

Ideone Demo

+0

答案是对的,但我不明白'p = re.compile(r'(\ d {3})')'。你能解释一下吗? – lens

+0

是的!然而,OP仍未回答“1235678”情况下的预期输出。 – AKS

+0

@ user5673769它与你在正则表达式中提到的相同,除了这是找到字符串中存在的三个数字的所有_non-overlapping_组合 – rock321987