Warum gibt mein Regex-Code kein Ergebnis zurück?

Warum gibt mein Regex-Code kein Ergebnis zurück?

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+.

verwandte Informationen