2012-04-05 15 views
5

इस प्रोग्राम में मैं बनाने की कोशिश कर रहा हूं, मेरे पास एक अभिव्यक्ति है (जैसे "I = 23mm", या "H = 4V") और मैं 23 निकालने का प्रयास कर रहा हूं (या 4) इसके बाहर, ताकि मैं इसे एक पूर्णांक में बदल सकूं।1-शब्द स्ट्रिंग से किसी संख्या को निकालने

जिस समस्या में मैं चल रहा हूं वह यह है कि अभिव्यक्ति के बाद से मैं संख्याओं को 1 शब्द से बाहर ले जाने की कोशिश कर रहा हूं, इसलिए मैं विभाजन() या कुछ भी उपयोग नहीं कर सकता।

एक उदाहरण मैंने देखा लेकिन wouldnt काम था -

I="I=2.7A" 
[int(s) for s in I.split() if s.isdigit()] 

यह wouldnt काम है क्योंकि यह केवल लेता संख्या रिक्त स्थान से सीमांकित कर रहे हैं कर रहे हैं। यदि int078vert शब्द में कोई संख्या थी, तो यह इसे निकालेगी नहीं। इसके अलावा, मेरे पास घूमने के लिए रिक्त स्थान नहीं हैं।

मैं एक है कि इस तरह से देखा,

re.findall("\d+.\d+", "Amps= 1.4 I") 

की कोशिश की, लेकिन यह, या तो फ्लॉप काम क्योंकि संख्या जाता है कि पारित किया जा रहा हमेशा 2 अंक नहीं है। यह 5 की तरह कुछ हो सकता है, या 13.6 की तरह कुछ।

क्या कोड मैं इतना लिखने के लिए की जरूरत है कि अगर मैं

I="I=2.4A" 

या

I="A=3V" 

तो है कि मैं इस स्ट्रिंग में से केवल संख्या निकाल सकते हैं के रूप में एक स्ट्रिंग, इस तरह से पारित? (और इस पर संचालन करते हैं)? कोई रिक्त स्थान या अन्य निरंतर वर्ण नहीं हैं जिन्हें मैं सीमित कर सकता हूं।

+0

ऐसा लगता है कि आप कर रहे हैं इसे पूर्णांक और दशमलव संख्या दोनों के लिए हल करने का प्रयास कर रहा है। क्या प्रत्येक स्ट्रिंग में हमेशा एक संख्या होगी? – yoozer8

+0

हाँ। प्रत्येक स्ट्रिंग में हमेशा 1 नंबर होगा, लेकिन उस नंबर को बनाने के लिए कई दशमलव हो सकते हैं। – Kyle

उत्तर

11
>>> import re 
>>> I = "I=2.7A" 
>>> s = re.search(r"\d+(\.\d+)?", I) 
>>> s.group(0) 
'2.7' 
>>> I = "A=3V" 
>>> s = re.search(r"\d+(\.\d+)?", I) 
>>> s.group(0) 
'3' 
>>> I = "I=2.723A" 
>>> s = re.search(r"\d+(\.\d+)?", I) 
>>> s.group(0) 
'2.723' 
+0

बहुत बहुत धन्यवाद। अच्छा काम किए। – Kyle

3

आरई शायद इस के लिए अच्छा है, लेकिन एक आरई के रूप में जवाब पहले से ही नियुक्त किया गया है, मैं अपने गैर regex उदाहरण लेते हैं और इसे संशोधित करेंगे:


One example I saw but wouldnt work was - 

I="I=2.7A" 
[int(s) for s in I.split() if s.isdigit()] 

अच्छी बात यह है कि split() तर्क ले सकते हैं। इस प्रयास करें:

extracted = float("".join(i for i in I.split("=")[1] if i.isdigit() or i == ".")) 

संयोग से, यहाँ फिर आप आपूर्ति में खराबी है:

"\d+.\d+" 
\d+ #match one or more decimal digits 
. #match any character -- a lone period is just a wildcard 
\d+ #match one or more decimal digits again 

एक तरह से यह (सही) करने के लिए होगा:

"\d+\.?\d*" 
\d+ #match one or more decimal digits 
\.? #match 0 or 1 periods (notice how I escaped the period) 
\d* #match 0 or more decimal digits 
+0

आपका विभाजन समाधान काफी साफ है: डी। +1 –

+0

विभिन्न विधि की सराहना करें। +1 – Kyle

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