it-swarm.com.de

Wie kann man Integer-Werte aus einem String in Python erhalten?

Angenommen, ich hatte eine Schnur

string1 = "498results should get" 

Jetzt muss ich nur ganzzahlige Werte aus der Zeichenfolge wie 498 abrufen. Hier möchte ich list slicing nicht verwenden, da die ganzzahligen Werte wie in den folgenden Beispielen erhöht werden können:

string2 = "49867results should get" 
string3 = "497543results should get" 

Ich möchte also nur ganzzahlige Werte genau in derselben Reihenfolge aus dem String herausholen. Ich meine wie 498,49867,497543 von string1,string2,string3.

Kann mir jemand sagen, wie das in einer oder zwei Zeilen geschieht?

>>> import re
>>> string1 = "498results should get"
>>> int(re.search(r'\d+', string1).group())
498

Wenn der String mehrere Ganzzahlen enthält:

>>> map(int, re.findall(r'\d+', string1))
[498]
82
jamylak

Eine Antwort aus ChristopheD hier: https://stackoverflow.com/a/2500023/1225603

r = "456results string789"
s = ''.join(x for x in r if x.isdigit())
print int(s)
456789
35
Sepero

wenn Sie mehrere Nummerngruppen haben, ist dies eine weitere Option

>>> import re
>>> print(re.findall('\d+', 'xyz123abc456def789'))
['123', '456', '789']

es ist jedoch nicht gut für Fließkommazahlen.

11
jacanterbury

Iterator-Version

>>> import re
>>> string1 = "498results should get"
>>> [int(x.group()) for x in re.finditer(r'\d+', string1)]
[498]
8
John La Rooy
>>> import itertools
>>> int(''.join(itertools.takewhile(lambda s: s.isdigit(), string1)))
7
Craig Citro

Hier ist Ihr Einzeiler, ohne reguläre Ausdrücke zu verwenden, die manchmal teuer werden können:

>>> ''.join(filter(str.isdigit, "1234GAgade5312djdl0"))

kehrt zurück:

'123453120'
6
Bobort
def function(string):  
    final = ''  
    for i in string:  
        try:   
            final += str(int(i))   
        except ValueError:  
            return int(final)  
print(function("4983results should get"))  
0
Kishor Subedi

Bei Python 3.6 geben diese beiden Zeilen eine Liste zurück (möglicherweise leer).

>>[int(x) for x in re.findall('\d+', your_string)]

Ähnlich zu

>>list(map(int, re.findall('\d+', your_string))
0
huseyin39