Ich möchte alle in einer Zeichenkette enthaltenen Zahlen extrahieren. Was ist für diesen Zweck besser geeignet, reguläre Ausdrücke oder die isdigit()
Methode?
例
line = "hello 12 hi 89"
Ergebnis:
[12, 89]
Ich möchte alle in einer Zeichenkette enthaltenen Zahlen extrahieren. Was ist für diesen Zweck besser geeignet, reguläre Ausdrücke oder die isdigit()
Methode?
例
line = "hello 12 hi 89"
Ergebnis:
[12, 89]
line2 = "hello 12 hi 89" # this is the given string
temp1 = re.findall(r'\d+', line2) # find number of digits through regular expression
res2 = list(map(int, temp1))
print(res2)
Hallo ,
können Sie alle ganzen Zahlen in der Zeichenkette mit Hilfe des Ausdrucks findall suchen.
Im zweiten Schritt erstellen Sie eine Liste res2 und fügen die in string gefundenen Ziffern zu dieser Liste hinzu
Ich hoffe, das hilft
Grußworte, Diwakar Sharma
Die bereitgestellte Antwort wurde zur Überprüfung als Beitrag von geringer Qualität gekennzeichnet. Hier sind einige Richtlinien für Wie schreibe ich eine gute Antwort? . Diese Antwort mag zwar richtig sein, könnte aber eine Erläuterung vertragen. Antworten, die nur einen Code enthalten, werden nicht als "gute" Antworten angesehen. Von Überprüfung .
Diese Antwort enthält auch den Fall, dass die Zahl in der Zeichenkette float ist
def get_first_nbr_from_str(input_str):
'''
:param input_str: strings that contains digit and words
:return: the number extracted from the input_str
demo:
'ab324.23.123xyz': 324.23
'.5abc44': 0.5
'''
if not input_str and not isinstance(input_str, str):
return 0
out_number = ''
for ele in input_str:
if (ele == '.' and '.' not in out_number) or ele.isdigit():
out_number += ele
elif out_number:
break
return float(out_number)
Ich bin erstaunt, dass noch niemand auf die Verwendung von itertools.groupby
als Alternative zu erreichen.
Sie können verwenden itertools.groupby()
zusammen mit str.isdigit()
um Zahlen aus der Zeichenkette als zu extrahieren:
from itertools import groupby
my_str = "hello 12 hi 89"
l = [int(''.join(i)) for is_digit, i in groupby(my_str, str.isdigit) if is_digit]
Der Wert, der von l
sein wird:
[12, 89]
PS: Dies dient nur zur Veranschaulichung, um zu zeigen, dass wir alternativ auch groupby
um dies zu erreichen. Dies ist jedoch keine empfehlenswerte Lösung. Wenn Sie dies erreichen wollen, sollten Sie Folgendes verwenden akzeptierte Antwort von fmark basierend auf der Verwendung des Listenverständnisses mit str.isdigit
als Filter.
Der sauberste Weg, den ich gefunden habe:
>>> data = 'hs122 125 &55,58, 25'
>>> new_data = ''.join((ch if ch in '0123456789.-e' else ' ') for ch in data)
>>> numbers = [i for i in new_data.split()]
>>> print(numbers)
['122', '125', '55', '58', '25']
oder dies:
>>> import re
>>> data = 'hs122 125 &55,58, 25'
>>> numbers = re.findall(r'\d+', data)
>>> print(numbers)
['122', '125', '55', '58', '25']
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
4 Stimmen
Leider waren die Beispiel-Eingabedaten so simpel, dass sie zu naiven Lösungen einluden. Übliche Fälle sollten Eingabezeichenfolgen mit interessanteren Zeichen neben den Ziffern behandeln. Eine etwas anspruchsvollere Eingabe:
'''gimme digits from "12", 34, '56', -789.'''