2016-08-22 4 views
2

ich den Python 3.5 re Modul mit diesem Code verwenden:Python 3.5 regulärer Ausdruck für Verzeichnisse passenden

>>> test 
'\\\\192.168.1.2\\shared\\Department\\Travel\\FY 2015\\Travel Expense Statement Jul 25 2019.pdf' 

Ich mag Department\Travel\FY 2015\Travel Expense Statement Jul 25 2019.pdf zurückzukehren. Ich habe die folgende Regex versucht, aber werden immer Fehler wie sre_constants.error: nothing to repeat at position 12

x=re.compile("shared\\[^\\](*?)") 
print(x.findall(test)) 

oder die leeren Ergebnis [''] für:

x=re.compile("shared\\\(.*?)") 

Wie kann ich diese Operation erreichen?

Antwort

2

Das Problem mit Ihrem regulären Ausdruck ist sehr einfach, entfernen Sie das ? Zeichen in Ihrem zweiten regulären Ausdruck. Sie brauchen nur .*, die null oder mehr Zeichen entspricht.

*? zusammen bedeutet ein fauler Quantifizierer, der so wenig wie möglich übereinstimmt, also wenn Sie .*? verwenden, bedeutet es "null oder mehr beliebige Zeichen, aber so wenig wie möglich". Wie für den ersten regulären Ausdruck hat das * kein vorhergehendes Atom, auf das es sich anwenden könnte, daher der Fehler.


Im allgemeinen Fall sollten Sie lieber verwenden, um die ntpath Modul wie in kennytm's answer there.

+1

Upvote für wörtliche Frage zu beantworten und über regex Syntax lehren, aber ich glaube nicht, das ist die beste Antwort ist, weil der von @kennytm schneidet man zur Wurzel des XY-Problems. –

+0

@Antti: Danke. Ich habe damit herumgespielt und dachte, ich hätte diese Variante ausprobiert, aber ich denke nicht. – jftuga

3

Sie sollten Regex dafür nicht verwenden. Verwenden Sie stattdessen die ntpath module (oder os.path, wenn Sie das Skript sicher sind, nur unter Windows ausgeführt wird):

>>> s = '\\\\192.168.1.2\\shared\\Department\\Travel\\FY 2015\\Travel Expense Statement Jul 25 2019.pdf' 
>>> import ntpath 
>>> ntpath.splitdrive(s) 
('\\\\192.168.1.2\\shared', '\\Department\\Travel\\FY 2015\\Travel Expense Statement Jul 25 2019.pdf') 
>>> ntpath.splitdrive(s)[1][1:] 
'Department\\Travel\\FY 2015\\Travel Expense Statement Jul 25 2019.pdf' 
+0

Guter Job, der zur Wurzel des XY-Problems führt. –

+0

@kennytm: Danke. Ich habe die Frage so klein wie möglich gemacht. Die REs werden in einer INI-Datei gespeichert und sind daher nicht genau NT-Pfade. Allerdings wusste ich nichts über das ntpath-Modul und werde es definitiv in Zukunft verwenden! – jftuga