你需要double双重逃脱again, or使用原始字符串代替:
fileName = re.match("[^\\\\]*.c$",fileName)
or
fileName = re.match(r"[^\\]*.c$",fileName)
否则首先是Python,然后正则表达式编译器将解释这些反斜杠,从而产生]
被逃脱:
>>> print("[^\\]*.c$")
'[^\]*.c$'
另请参阅黑斩瘟疫 sectionPython 正则表达式 HOWTO 的内容。
接下来,您需要注意的是re.match
锚点到字符串的开头。你可能想要使用re.search()
而不是这里。请参阅match() vs. search() section:
The match()
函数仅检查 RE 是否在字符串的开头匹配,而search()
将向前扫描字符串以查找匹配项。记住这种区别很重要。
你可能还想逃离.
in the .c
part; .
匹配任何字符,所以foobaric
也会匹配;这i
会满足.
图案。
The re.match()
and re.search()
函数返回一个匹配对象,不是字符串的匹配部分。您必须明确提取该部分:
fileName = re.search(r'[^\\]*\.c$', fileName).group()
Demo:
>>> import re
>>> fileName = 'C:\\Users\\anandada\\workspace\\MyTestProject\\src\\OpenTest.c'
>>> re.search(r'[^\\]*\.c$', fileName).group()
'OpenTest.c'