Python: Was stimmt an meinem Regex nicht?
Auf der Seite regex101.com kann man reguläre Ausdrücke testen, dort habe ich den String:
F:\2020
(einen Ordner)
mittels des Musters
[A-Z]{1}\:\\20[0-9]{2}
erfolgreich gefunden.
Mein Python script findet ihn aber nicht:
import re, os
for dn,d,f in os.walk(os.path.abspath(os.path.curdir)):
if re.match("[A-Z]{1}\:\\20[0-9]{2}", dn):
print(dn)
else:
print("no match.")
Solange ich den Backslash mit einem Backslash maskiere, bekomme ich eine Fehlermeldung. Wenn ich die beiden \\ vor dem Doppelpunkt und dem \ entferne, erhalte ich keine matches.
Warum funktioniert es nicht, warum finde ich die Ordnernamen nicht als Match?
2 Antworten
Ich würde mir zum Testen dn auch im else-Zweig ausgeben lassen und dann mal gucken, ob der Pfad so aussieht, wie du ihn erwartest.
Wenn du dem Musterstring ein r voranstellst, verhält es sich auch eher so, wie du hoffst. Andernfalls musst du \ durch Doppel-\ ersetzen.
https://docs.python.org/3/library/re.html#raw-string-notation
In der idle Konsole:
>>> import re
>>> muster = r"[A-Z]{1}\:\\20[0-9]{2}"
>>> pfad = r"F:\2020"
>>> re.match(muster,pfad)
<re.Match object; span=(0, 7), match='F:\\2020'>
Ohne r bekomme ich Fehlermeldungen (invalid group reference), mit r funktioniert es. Was auch immer bei dir anders sein sollte.
nichts geändert, irgendwann ging´s ... wie so oft.
import re, os
for dn,d,f in os.walk(os.path.abspath(os.path.curdir)):
if re.match("[A-Z]{1}\\\\\:\\20[0-9]{2}", dn):
print(dn)
else:
print("no match.")
probier es mal so, kann mir vorstellen dass er dein Backslash als Escape Zeichen verwendet.
Würde die mal verdoppeln
Aber du hast dort doppelte Backslashes hingesetzt, wo nicht mal ein einziger vorkommt im Treffer. Wozu?
Das hab ich leider beides schon erfolglos probiert.