2016-05-31 9 views
0

Ich versuche eine Regex für Calibre (Python) zu schreiben, um E-Books zu finden, die den Seriennamen in Klammern im Titel haben. Ich habe eine benutzerdefinierte Spalte mit dem Seriennamen und Titel von einem „~“ getrennt, zum Beispiel:Regex, um den ersten Teil der Saite im zweiten Teil zu finden?

"The Series~The Book Title (The Series)" 

Best I kann sich mit in Klammern aus dem Seriennamen alles findet im Titel mindestens einen Buchstaben mit nur finden wollen diejenigen, die die ganzen ersten Teil der Zeichenfolge in Klammern am Ende des zweiten Teils haben, kann es zusätzliche Informationen enthält

(.+)~.*[\(\1\)].* 

I:.

Danke.

+0

Entfernen Sie die eckigen Klammern und ersetzen Sie die letzte. * Mit $. –

Antwort

0

Dies funktioniert in Notepad ++:

(.+)~[^\(]*\(\1\).* 

Ich bin nicht sicher, dass es das gleiche in Python arbeiten, aber regexp Prozessoren sind in der Regel sehr ähnlich, so probieren Sie es aus.

0

Ihre regex ziemlich nah ist, können Sie ein wenig Ihre Regex ändern und haben dies:

(.+?)~.*[([]\1[)\]].* 

Working demo

Regular expression visualization

Dies wird Strings passen wie:

The Series~The Book Title (The Series) 
The Series~The Book Title [The Series] 

Wenn Sie jedoch nur Worte mit paretheses wollen übereinstimmen, dann können Sie haben:

(.+?)~.*[(]\1[)].* 
or 
(.+?)~.*\(\1\).* 

Working demo

Regular expression visualization

0

Danke für die Vorschläge. Sie funktionieren perfekt in der Python-Demo, funktionieren aber aus unbekannten Gründen nicht in Calibre. Scheint so, als ob ein Charakter am ehesten zu der Capture-Gruppe passt. Muss eine Einschränkung im Regex-System sein, das Calibre verwendet.

Verwandte Themen