我正在使用带有此代码的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\\\(.*?)" )
如何完成此操作?
答案 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
模块。