2014-06-20 104 views
10

我想要一個正則表達式匹配任何一組數字,一個可能的點。如果之後有另一個點和更多數字,請與前面的數字,點和後面的數字進行重疊匹配。
示例串= 'aa323aa232.02.03.23.99aa87..0.111111.mm'
期望的結果= [323, 232.02, 02.03, 03.23, 23.99, 87, 0.111111]重疊正則表達式

目前正在使用:

import re 
i = 'aa323aa232.02.03.23.99aa87..0.111111.mm' 
matches = re.findall(r'(?=(\d+\.{0,1}\d+))', i) 
print matches 

輸出:

['323', '23', '232.02', '32.02', '2.02', '02.03', '2.03', '03.23', '3.23', '23.99', '3.99', '99', '87', '0.111111', '111111', '11111', '1111', '111', '11'] 
+1

是'99'本身不是一個結果? – hwnd

回答

10

這使用一個前向斷言用於捕獲,然後另一個表達爲g obbling字符以下的規則:

>>> import re 
>>> i = 'aa323aa232.02.03.23.99aa87..0.111111.mm' 
>>> re.findall(r'(?=(\d+(?:\.\d+)?))\d+(?:\.\d+(?!\.?\d))?', i) 

輸出

['323', '232.02', '02.03', '03.23', '23.99', '87', '0.111111'] 
+5

+1 - 具體來說,Python解決方案將是're.findall('(?=(\ d +(?:\。\ d +)?))\ d +(?:\。\ d +(?!\。?\ d))?',i)'其中'i'是字符串。 – iCodez

+1

+1對於'\ d'詩歌:) – zx81