2014-06-20 15 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

इस पर कब्जा करने के लिए एक अग्रदर्शी दावे का उपयोग करता है, और फिर एक और जी के लिए अभिव्यक्ति अपने नियमों का पालन पात्रों 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 - विशेष रूप से, पायथन समाधान 're.findall (' (? = (\ D + (?: \। \ D +)?)) \ D + (?: \। \ D + (?! \।? \ \ डी))? ', i)' जहां 'i' स्ट्रिंग है। '12 डी कविता के लिए – iCodez

+1

+1 :) – zx81

संबंधित मुद्दे