2017-02-07 3 views
2

Ich versuche, eine Funktion zu machen, die ein Array von Ordnernamen und eine Nummer (welche Saison-Ordner die Funktion sollte zurückgeben) und ich möchte überprüfen, ob das ein Ordner ist mit der richtigen Staffelnummer, aber ich besitze nicht nur einfache englische TV-Shows, daher sind meine Ordner Staffel genannt == Deutsche Fernsehshow, und Staffel wenn es Eng ist.Regexp arbeitet regex101.com, aber nicht in Python

In diesem Beispiel wird die Ordner diffrent Ordner enthalten würden (d) Im der Suche nach (Staffel | Staffel) 2 sollte Saison zurückkehren 02, weil es vor Staffel 2 in einem Array

def findFolderbyNumber(path, number): 
    d = getFolders(path) 
    d = ['Staffel 1','Staffel 20','Season 02', 'Staffel 2', 'Season 3'] 
    number = 2 
    for obj in d: 
     pattern = '(.*)(Staffel|Season)((\s?)*)((0?)*)('+str(number)+')(\D)(.*)' 
     m = re.match(pattern, obj) 
     print(obj, end='\tMatch = ') 
     print(m) 
     if(m): 
      return obj 
    return 0 


Staffel 1 Match = None 
Staffel 20 Match = None 
Season 02 Match = None 
Staffel 2 Match = None 
Season 3 Match = None 
+1

'\ D' entspricht einem Zeichen ohne Ziffer. Keines Ihrer Samples hat eine 2 gefolgt von einem Zeichen ohne Ziffer. – glibdud

+1

ohne es gibt Staffel 20, wie kann ich es beheben? Ich dachte \ D würde den Trick tun: D –

+1

Klingt wie Sie wollen eine Wortgrenze ('\ b'). – glibdud

Antwort

2

Sie müssen ersetzen Sie die letzte \D durch (?!\d).

In Ihrer Prüfung verwendeten Sie eine mehrzeilige Zeichenfolgeeingabe und im Code testen Sie einzelne Zeichenfolgen, die am Ende nach 2 keine Ziffer haben. \D ist ein konsumierendes Muster, es muss ein nicht-stelliges Zeichen geben, und das (?!\d) ist ein negatives Lookahead, ein nicht konsumierendes Muster, das nur erfordert, dass das nächste Zeichen keine Ziffer sein kann.

Eine andere Lösung ist die letzte \D mit einer Wortgrenze \b zu ersetzen, aber Sie haben eine rohe Zeichenfolge verwenden wörtliche Probleme zu vermeiden mit Flucht (das heißt r'pattern' verwenden).

Verwandte Themen