2012-04-07 11 views
1

Dieser ist hoffentlich einfach, ich habe eine Zeichenfolge "Spannung ist E = 200V und der Strom ist I = 4.5A". Ich muss beide Float-Werte extrahieren. Ich habe versucht, die Funktion float() zu verwenden (mit einer Unterzeichenfolge von 11 bis 16 in den Parametern), aber ich bekomme einen Fehler. Mir ist klar, dass dies wahrscheinlich keine gute Programmierung ist, ich bin gerade dabei, Python zu lernen. Jede Hilfe wird sehr geschätzt.Suche Float in s-String- Python

edit: Hier ist der Code

I = 0.0  
if((currentString.find('I=')) != -1): 
      I = float(currentString[(currentString.find('I=')):(currentString.find('A'))]) 

wieder, in dieser Sprache neue IM- und ich weiß, dass hässlich aussieht.

+0

Können Sie uns Ihren Code zeigen? 's = '200'; Float (s) 'sollte funktionieren. – George

+0

Der Teilstring ist 'E = 200V', was kein gültiger Gleitkomma ist. Sie müssen viel spezifischer sein, Sie müssen Code einbeziehen, und Sie müssen den Fehler, den Sie mit einem Traceback erhalten, einbeziehen. –

+0

Ich bin mir nicht sicher, ob dies für Sie funktioniert: http://ideone.com/ynjW3. Informieren Sie uns genauer über Ihren Fehler, wenn Sie auf einen Fehler stoßen. – George

Antwort

2

Ich neige dazu, reguläre Ausdrücke zu erwähnen, wie es oft ein verwirrendes Werkzeug für Anfänger ist, aber für Ihre Verwendung und Referenz ist hier ein Ausschnitt, der Ihnen helfen sollte, diese Werte zu erhalten. Es ist unwahrscheinlich, dass die IIRC-Spannung float ist (statt int?), So dass diese übereinstimmende Operation später zurückkehrt, aber float sein kann, wenn dies wirklich erforderlich ist.

>>> import re 
>>> regex = re.compile(r'.*?E=([\d.]+).*?I=([\d.]+)') 
>>> re.match('voltage is E=200V and the current is I=4.5A') 
>>> matches = regex.match('voltage is E=200V and the current is I=4.5A') 
>>> int(matches.group(1)) 
200 
>>> float(matches.group(2)) 
4.5 

Verfahren solche Zahlen mit einfachen Werkzeugen zu extrahieren:

>>> s.find('E=') 
11 
>>> s.find('V', 11) 
16 
>>> s[11:16] 
'E=200' 
>>> s[11+2:16] 
'200' 
>>> int(s[11+2:16]) 
200 
+0

Danke! Ich bin irgendwie verrückt, ich könnte nicht daran denken: /, aber vielen Dank Mann – MellowFellow

+0

Sie möchten '-' zwischen den [] hinzufügen, wenn Spannungen oder Verstärker negativ sein können. Ich bin kein Elektroingenieur. ;) – Kurt