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

出力結果:私は結果が('123','567')ある必要Pythonの正規表現ですか?

('567',) 

(\d{3})は最後のグループのみを出力できますが、グループごとに出力します。

+0

.. '+'正規表現からも – rock321987

+0

're.findall( "\ dの{3}"、「123567を' $ 'を削除して")' – ozgur

+0

'$'を削除すると、結果は同じです。 – lens

答えて

2

私はニシキヘビの方法のビットでそれをやっている

ソリューション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

S 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これはあなたの正規表現で述べたのと同じですが、これは文字列にある3桁の_non-overlapping_の組み合わせがすべて見つかっていることを除いてです – rock321987