2013-07-16 8 views
7

से मेल नहीं खाती है यह उन चीजों में से एक है जहां मुझे यकीन है कि मुझे कुछ आसान याद आ रहा है, लेकिन ... नीचे नमूना कार्यक्रम में, मैं स्ट्रिंग को पार्स करने के लिए पायथन की आरई लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं " लाइन "प्रतिशत चिह्न से पहले फ्लोटिंग-पॉइंट नंबर प्राप्त करने के लिए, यानी" 90.31 "। लेकिन कोड हमेशा "कोई मैच" प्रिंट करता है।पायथन नियमित अभिव्यक्ति

मैंने कुछ अन्य नियमित अभिव्यक्तियों की भी कोशिश की है, सभी एक ही परिणाम के साथ। मैं क्या खो रहा हूँ?

#!/usr/bin/python 
import re 
line = ' 0 repaired, 90.31% done' 
pct_re = re.compile(' (\d+\.\d+)% done$') 
#pct_re = re.compile(', (.+)% done$') 
#pct_re = re.compile(' (\d+.*)% done$') 
match = pct_re.match(line) 
if match: print 'got match, pct=' + match.group(1) 
else: print 'no match' 
+0

मुझे पता था कि यह कुछ मामूली था! आपके त्वरित और सहायक उत्तरों के लिए सभी को धन्यवाद। – Matt

उत्तर

15

match केवल शुरुआत स्ट्रिंग के से मेल खाता है। यदि आप pct_re.search(line) इसके बजाय करते हैं तो आपका कोड ठीक काम करता है।

4

आप re.findall बजाय का उपयोग करना चाहिए:

>>> line = ' 0 repaired, 90.31% done' 
>>> 
>>> pattern = re.compile("\d+[.]\d+(?=%)") 
>>> re.findall(pattern, line) 
['90.31'] 

re.match स्ट्रिंग के शुरू में मिलान कर देंगे। तो आपको पूर्ण स्ट्रिंग के लिए रेगेक्स बनाने की आवश्यकता होगी।

2

यह कोशिश अगर तुम सच में मैच उपयोग करना चाहते हैं:

re.match(r'.*(\d+\.\d+)% done$', line) 

आर '...' जो अजगर में regexp साथ उपयोग करने के लिए एक अच्छा अभ्यास है एक "कच्चे" स्ट्रिंग कुछ बच दृश्यों अनदेखी, है। - kratenko (नीचे टिप्पणी देखें)

+0

आप जोड़ना चाहते हैं, कि 'आर' ... '' एक "कच्ची" स्ट्रिंग है जो कुछ भागने के दृश्यों को अनदेखा कर रही है, जो कि अजगर में regexp के साथ उपयोग करने के लिए एक अच्छा अभ्यास है। – kratenko

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