Es scheint, dass es nicht unerwartet bekannt ist, aber im regulären Ausdruck des Python 3-Standard-Re-Moduls stimmt \ d
auch mit sogenannten Zahlen voller Breite überein.
Ich werde es tatsächlich versuchen.
python
>>> import re
>>> re.findall(r"\d", "012012")
['0', '1', '2', '0', '1', '2']
>>>
\ d
entspricht auch '0'
,' 1'
und '2'
.
Der Grund, warum dieses Verhalten nicht bekannt ist, ist
\ d
mit sogenannten Zahlen voller Breite übereinstimmtEs kann auch andere Gründe geben.
In der Dokumentation zum Modul heißt es außerdem, dass empfohlen wird, "[0-9]" anstelle von "\ d" zu verwenden, um "\ d" nur mit "[0-9]" abzugleichen. ](Http://docs.python.jp/3.3/library/re.html#regular-expression-syntax), aber aus Gründen wie dem Wunsch, die langen regulären Ausdrücke für andere Sprachen so wie sie sind zu verwenden, \ Wenn Sie d
behalten möchten, können Sie entweder flags = re.ASCII
zum Argument hinzufügen oder (? A)
zum Anfang des regulären Ausdrucks hinzufügen.
python
>>> import re
>>> re.findall(r"\d", "012012", flags=re.ASCII)
['0', '1', '2']
>>> re.findall(r"(?a)\d", "012012")
['0', '1', '2']
>>>
Diese Flags wirken sich jedoch auf den gesamten regulären Ausdruck aus. Weitere Informationen finden Sie in der Dokumentation zum Modul.
Beachten Sie, dass flags =
weggelassen wird.
Sie können es als "re.findall (r" \ d "," 012012 ", re.ASCII)" schreiben, aber wenn Sie es schlecht weglassen, können Sie süchtig werden, daher wird dringend empfohlen, es nicht wegzulassen.
Übrigens ich selbst
Aus Gründen wie
python
import regex
RE_DIGITS = regex.compile(r"""(?xa)
\A\d+\Z""")
def is_digits(digits):
if RE_DIGITS.match(digits) is not None:
return True
else:
return False
Ich schreibe gerne so, aber ich mache mir immer noch Sorgen um die Verwendung von "\ d", also versuche ich, so viel wie möglich "[0-9]" zu schreiben. (Is_digits ()
ist nur ein Beispiel, nur für den Fall)
Recommended Posts