的Python 3.5的正则表达式匹配的目录
我使用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\\\(.*?)")
我怎样才能完成这一操作?
与您的正则表达式的问题非常简单,请删除第二个正则表达式中的?
字符。您只需要匹配零个或多个字符的.*
。
*?
在一起意味着一个尽可能少匹配的懒惰量词,所以如果您使用.*?
,它意味着“零个或多个任何字符,但尽可能少”。至于第一个正则表达式,*
没有可应用的前一个原子,因此是错误。
在一般的情况下,你应该只是使用ntpath
模块为kennytm's answer there。
你不应该使用这个正则表达式。相反,使用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'
伟大的工作切割到XY问题的根源。 –
@kennytm:谢谢。我尽可能缩小了这个问题的范围。 RE存储在.ini文件中,因此不是严格nt路径。但是,我不知道ntpath模块,并且一定会在将来使用它! – jftuga
给予好评,但我不认为这是最好的答案,因为@kennytm的一个切入XY问题的根源。 –
@Antti:谢谢。我一直在摆弄这个,认为我已经尝试过这种变化,但我猜不是。 – jftuga