2017-01-31 3 views
1

Ich muss zwei Zahlen innerhalb einer Zeichenfolge extrahieren. Sie können wie folgt aussehen:Erhalten Sie zwei Zahlen aus einer Zeichenfolge

(0,0) 
(122,158) 
(1,22) 
(883,8) 
etc... 

Also habe ich die erste Zahl vor dem Komma und die Zahl nach dem Komma erhalten möchten und speichern sie in Variablen. Ich kann die erste Nummer wie folgt erhalten:

myString.split(',')[0][1:]) 

Allerdings kann ich nicht herausfinden, wie Sie die nächste Nummer bekommen.


Danke für die Hilfe jeder!

+0

Reguläre Ausdrücke verwenden https://docs.python.org/2/library/re.html –

+0

In Ihrem geposteten Code bezieht sich '[0]' auf die erste Zahl. Also mach einfach '[1]' um die zweite Nummer zu bekommen. – spicypumpkin

+0

Dadurch wird auch die Klammer gedruckt. Ich will nur die Zahlen. –

Antwort

2

Es sollte mit etwas arbeiten wie

myVar.split(',')[0][1:] # = 122 for the string in the second line 
myVar.split(',')[1][:-1] # = 158 for the string in the second line 

Dies sollte der einfachste Weg, dies zu tun

+0

@Posh_Pumpkin Das habe ich festgestellt, sobald ich gepostet habe, meine Finger waren schneller als mein Gehirn :-) –

2

Sie von den Klammern bekommen könnte loszuwerden, teilen Sie die Zeichenfolge und konvertieren jedes Element ein int:

a, b = [int(x) for x in s[1:-1].split(',')] 

natürlich, wenn Sie absolut sicher über t er Zeichenfolge das Format, und kümmern sich nicht um die Sicherheit, könnten Sie einfach eval die Zeichenfolge:

a, b = eval(s) 
1

Multi Zuordnung, stripping die Klammern und Spaltung tun:

a, b = myString.lstrip('(').rstrip(')').split(',') 
# a, b = map(int, (a, b)) 
1
myVar.split(',')[1][:-1]) 

erhalten Sie die zweite Nummer

2

Sie können ast.literal_eval() verwenden, um Ihre Zeichenfolge in ein Tupel zu konvertieren. Dies sorgt auch für zusätzliche Leerzeichen wie '(123, 158)'.

>>> from ast import literal_eval 
>>> tup = literal_eval('(122,158)') 
>>> tup[0] 
122 
>>> tup[1] 
158 

Oder einfach:

>>> first, second = literal_eval('(122,158)') 
1

Der einfachste Einzeiler wäre

a, b = (myString[1:-1].split(',')[0], myString[1:-1].split(',')[1]) 

Ruft die Klammern los zu werden, teilt dann auf dem Komma.

Verwandte Themen