Python: Was stimmt an meinem Regex nicht?

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


GunnarPetite 
Beitragsersteller
 01.02.2024, 08:07

Das hab ich leider beides schon erfolglos probiert.

Schachpapa  01.02.2024, 08:13
@GunnarPetite

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.

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

Woher ich das weiß:Hobby – Programmierer

GunnarPetite 
Beitragsersteller
 02.02.2024, 08:09

Aber du hast dort doppelte Backslashes hingesetzt, wo nicht mal ein einziger vorkommt im Treffer. Wozu?