2016-08-08 52 views
-2

ich die Zeichenfolge habenConvert Messung von String in Int oder Float

var = '7 msecs' 
#var = int(var) 
#var = float(var) 

Und ich möchte, dass (7) auf eine ganze Zahl konvertieren, oder Schwimmer (7,0). Diese Konvertierung funktioniert in Javascript, da es den ersten Wert vor den folgenden, nicht numerischen Werten zu übernehmen scheint.

Wie kann ich das in Python tun?

Ich möchte ein guter Weg, dies zu tun, ohne

var = int(var.split(' ')[0]) 

Es sollte auch für Arbeit zu tun zu haben:

'10mm' or '10.55€' 

gilt als Duplikat (Python: Extract numbers from a string)

Diese Frage ist anders , da ich versuche, die Fähigkeit von parseInt/parseFloat in Javascript zu replizieren, die nur die Zahlen am Anfang einer Zeichenkette zurückgibt. Diese andere Frage sucht nach allen Zahlen in einer Zeichenfolge.

#What I want: 
'123mm' -> 123 
'123mm1' -> 123 
+0

die messung ist immer in 'msecs'? – Trimax

+1

'int (var.split() [0])' –

+0

@Trimax gut, nein, es ist einfach msecs in meinem Beispiel, wie es ist, was ich gerade arbeite – Islarf

Antwort

1

Wenn Sie weißen Raum haben, verwenden split:

>>> s = "123 msecs2" 
>>> int(s.split()[0]) 
123 

Wenn Sie die Zahlen aus dem Anfang einer Zeichenfolge nur ohne Leerraum (oder mit regex) nehmen wollen, versuchen Sie dies:

>>> s = "123msecs2" 
>>> int("".join(list(next(iter(())) if not x.isdigit() else x for x in s))) 
123 

Hinweis, es ist inspiriert von der Diskussion here über das Ausbrechen von Listenkompromittierungen.

+0

Wenn Sie das Original (val.split() [0]) hinzufügen, werde ich auch die Antwort akzeptieren – Islarf

-1

Wenn     var = '7 msecs'

von Filter:

int(filter(str.isdigit, var)) 

von Regex:

import re 
p = re.compile(ur'\d') 
re.search(p, var) 

oder durch beitreten:

s = ''.join(x for x in var if x.isdigit()) 
print int(s) 
7 
-1

Dies ist bereits hier beantwortet: Python: Extract numbers from a string

Sie einen regulären Ausdruck alle Zahlen aus einer Zeichenfolge zu extrahieren verwenden:

>>> import re 
>>> s = "7 msecs" 
>>> re.findall(r"\d+", s) 
["7"] 

Wenn Sie nur wollen die erste Zahl aus der Zeichenfolge als int, könnten Sie verwenden:

>>> import re 
>>> s = "7 msecs" 
>>> int(re.findall(r"\d+", s)[0]) 
7 
-1

Wenn Sie den Import von Regex vermeiden möchten, können Sie versuchen, isdigit() zu verwenden. Aber für das, was es wert ist, würde ich int(var.split()[0]) dazu bevorzugen:

var = '7 msecs' 
numeric_end = 0 
for i in xrange(len(var)): 
    if not var[i].isdigit(): 
     numeric_end = i 
     break 

print int(var[:numeric_end]) 

Ich habe ich für den Index der ersten nicht-stelligen Zeichen zu verfolgen, statt eine Zeichenfolge für leichte Speicher/Leistungsgründe des Gebäudes. Dies extrahiert auch nur die erste Zahl in der Zeichenfolge.

Dies wird natürlich nur für Ints funktionieren. Für ein Float müssten Sie auch das . Zeichen akzeptieren (und wahrscheinlich verfolgen, ob Sie bereits feststellen müssen, ob es eine gültige Float-Zeichenfolge ist).