2016-08-22 31 views
2

我使用Python 3.5 re模块使用此代码:的Python 3.5的正则表达式匹配的目录

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

我要回Department\Travel\FY 2015\Travel Expense Statement Jul 25 2019.pdf。我曾尝试以下正则表达式,但不断收到错误,如sre_constants.error: nothing to repeat at position 12

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

或空的结果['']为:

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

我怎样才能完成这一操作?

回答

2

与您的正则表达式的问题非常简单,请删除第二个正则表达式中的?字符。您只需要匹配零个或多个字符的.*

*?在一起意味着一个尽可能少匹配的懒惰量词,所以如果您使用.*?,它意味着“零个或多个任何字符,但尽可能少”。至于第一个正则表达式,*没有可应用的前一个原子,因此是错误。


在一般的情况下,你应该只是使用ntpath模块为kennytm's answer there

+1

给予好评,但我不认为这是最好的答案,因为@kennytm的一个切入XY问题的根源。 –

+0

@Antti:谢谢。我一直在摆弄这个,认为我已经尝试过这种变化,但我猜不是。 – jftuga

3

你不应该使用这个正则表达式。相反,使用ntpath module(或os.path如果您确信脚本只能在Windows上运行):回答问题字面与教学有关的正则表达式语法

>>> 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

伟大的工作切割到XY问题的根源。 –

+0

@kennytm:谢谢。我尽可能缩小了这个问题的范围。 RE存储在.ini文件中,因此不是严格nt路径。但是,我不知道ntpath模块,并且一定会在将来使用它! – jftuga