Python 3.5正则表达式匹配目录

时间:2016-08-22 20:43:45

标签: python regex

我正在使用带有此代码的Python 3.5 re模块:

>>> 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 个答案:

答案 0 :(得分:3)

你不应该使用正则表达式。相反,如果您确定脚本只能在Windows上运行,请使用ntpath module(或os.path

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

答案 1 :(得分:2)

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

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

一般情况下,您应该使用kennytm's answer there中的ntpath模块。