Hier ist mein Code:
import re
word="ABCD 12345"
match=re.search(r"\d*",word)
print(match.group())
Für diesen Code erhalte ich keine Ausgabe (und auch keine Fehler).
Bitte helfen Sie. Was ist hier das Problem?
Antwort1
Das *
Sonderzeichen bedeutet "MatchNull oder mehr". Mit anderen Worten, \d*
es darf eine Übereinstimmung mit der Länge Null sein – und weil es das einzige in Ihrem regulären Ausdruck ist, darf die gesamte Übereinstimmung die Länge Null haben.
Es stimmt *
, das ist gierig und würde alle Ziffern zurückgebenWennes gelangte tatsächlich zu der Position, an der „12345“ vorkommt – beispielsweise re.match(r"\d*", "12345")
hätte die ganze Zahl zurückgegeben:
>>> re.search(r"\d*", "12345") <re.Match-Objekt; span=(0, 5), match='12345'>
Aber in Ihrem Fall gelangt es nicht wirklich zu dieser Stelle in der Zeichenfolge, sondern entscheidet sofort, dass eine Übereinstimmung an Position 0 und Länge 0 vorliegt. Beachten Sie das Attribut „span“:
>>> re.search(r"\d*", "ABCD 12345") <re.Match-Objekt;Spanne = (0, 0), Übereinstimmung=''>
Sie möchten wahrscheinlich stattdessen verwenden \d+
.