2014-06-20 21 views
10

Tôi muốn một regex khớp với bất kỳ tập hợp các chữ số nào, với một dấu chấm có thể. Nếu có một dấu chấm và nhiều chữ số khác sau đó, hãy thực hiện kết quả trùng lặp với các chữ số trước đó, dấu chấm và các chữ số sau.
dụ chuỗi = 'aa323aa232.02.03.23.99aa87..0.111111.mm'
kết quả mong muốn = [323, 232.02, 02.03, 03.23, 23.99, 87, 0.111111]Chồng chéo regex

hiện đang sử dụng:

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

đầu ra:

['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

là '99' không phải là một kết quả của bản thân? – hwnd

Trả lời

10

này sử dụng một sự khẳng định lookahead để chụp, và sau đó một biểu thức cho g obbling ký tự sau quy tắc của bạn:

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

Output

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

+1 - Cụ thể, giải pháp Python sẽ là 're.findall ('(? = (\ D + (?: \. \ D +)?)) \ D + (?: \. \ D + (?! \.? \ d))? ', i) 'trong đó' i' là chuỗi. – iCodez

+1

+1 cho thơ '\ d' :) – zx81