webentwicklung-frage-antwort-db.com.de

Nummer aus String in Python extrahieren

Ich bin neu bei Python und ich habe einen String, ich möchte die Zahlen aus dem String extrahieren. Zum Beispiel:

str1 = "3158 reviews"
print (re.findall('\d+', str1 ))

Ausgabe ist ['4', '3']

Ich möchte 3158 nur als Integer erhalten, nicht als Liste. 

18
Umair

Sie können filter die Zeichenfolge nach Ziffern mit der str.isdigit-Methode

>>> int(filter(str.isdigit, str1))
3158
67
Vishnu Upadhyay

Dieser Code funktioniert gut. Es gibt definitiv ein anderes Problem:

>>> str1 = "3158 reviews"
>>> print (re.findall('\d+', str1 ))
['3158']
19
Irshad Bhat

Ihre Regex sieht richtig aus. Sind Sie sicher, dass Sie bei den Variablennamen keinen Fehler gemacht haben? In Ihrem Code oben verwechseln Sie total_hotel_reviews_string und str

>>> import re
>>> s = "3158 reviews"
>>> print re.findall("\d+", s)
['3158']
8
hellobenallan

Wenn das Format so einfach ist (ein Leerzeichen trennt die Zahl vom Rest), dann

int(str1.split()[0])

würde es tun

6
6502
IntVar = int("".join(filter(str.isdigit, StringVar)))
1
Bernard

Um eine einzelne Zahl aus einer Zeichenfolge zu extrahieren, können Sie re.search() verwenden, das die erste Übereinstimmung (oder None) zurückgibt:

>>> import re
>>> string = '3158 reviews'
>>> int(re.search(r'\d+', string).group(0))
3158
1
Eugene Yarmash
a = []
line = "abcd 3455 ijkl 56.78 ij"
for Word in line.split():
 try:
  a.append(float(Word))
  except ValueError:
  pass
print(a)

AUSGABE

3455.0 56.78
0
Ayush Singh

Möglicherweise gibt es ein kleines Problem mit dem Code aus Vishnus Antwort. Wenn der String keine Ziffern enthält, wird ValueError zurückgegeben. Hier ist mein Vorschlag, dies zu vermeiden:

>>> digit = lambda x: int(filter(str.isdigit, x) or 0)
>>> digit('3158 reviews')
3158
>>> digit('reviews')
0
0
M.Danilchenko

Meine Antwort erfordert keine zusätzlichen Bibliotheken und ist leicht verständlich. Wenn Sie jedoch mehr als eine Zahl in einer Zeichenfolge enthalten, werden sie durch meinen Code miteinander verkettet.

def Search_number_String(String):
    index_list = []
    del index_list[:]
    for i, x in enumerate(String):
        if x.isdigit() == True:
            index_list.append(i)
    start = index_list[0]
    end = index_list[-1] + 1
    number = String[start:end]
    return number
0
Yang Qi

Ich bin ein Anfänger im Programmieren. Dies ist mein Versuch, die Fragen zu beantworten. Verwendete Python3.7-Version, ohne irgendwelche Bibliotheken zu importieren.

Dieser Code extrahiert und gibt eine Dezimalzahl aus einer Zeichenfolge zurück, die aus durch Leerzeichen (Wörter) getrennten Zeichensätzen besteht.

Achtung: Wenn es mehr als eine Zahl gibt, wird der letzte Wert zurückgegeben.

line = input ('Please enter your string ')
for Word in line.split():
    try:
        a=float(Word)
        print (a)
    except ValueError:
        pass

Die obigen Lösungen scheinen ganze Zahlen anzunehmen. Hier ist eine geringfügige Änderung, um Dezimalstellen zuzulassen:

num = float("".join(filter(lambda d: str.isdigit(d) or d == '.', inputString)

(Berücksichtigt kein - -Zeichen und geht davon aus, dass ein Punkt ordnungsgemäß in einer Ziffernfolge platziert ist, nicht nur ein englischsprachiger Punkt. Er ist nicht unzerstörbar, sondern funktioniert für meinen Datenfall.)

0
thund