SHR*_*HRI 1 python regex python-3.3
我想从路径中只获取带扩展名的文件名:
C:\\Users\\anandada\\workspace\\MyTestProject\\src\\OpenTest.c
Run Code Online (Sandbox Code Playgroud)
以下声明,
fileName = re.match("[^\\]*.c$", fileName)
Run Code Online (Sandbox Code Playgroud)
给出错误:
意外结束正则表达式
我使用的是python 3.3.2
你需要加倍的一倍逃脱再次,或改用原始字符串:
fileName = re.match("[^\\\\]*.c$",fileName)
Run Code Online (Sandbox Code Playgroud)
要么
fileName = re.match(r"[^\\]*.c$",fileName)
Run Code Online (Sandbox Code Playgroud)
否则先是Python,然后正则表达式编译器会解释那些反斜杠,导致]被转义:
>>> print("[^\\]*.c$")
'[^\]*.c$'
Run Code Online (Sandbox Code Playgroud)
另请参阅Python Regex HOWTO 的Blackslash Plague部分.
接下来,您需要知道re.match 锚点到字符串的开头.你可能想在re.search()这里使用.请参阅match()vs. search()部分:
该
match()函数仅检查RE在字符串开头是否匹配,同时search()将向前扫描字符串以进行匹配.记住这一区别非常重要.
您可能还需要逃避.的.c部分; .匹配任何字符,所以foobaric也匹配; 这i将满足.模式.
在re.match()和re.search()函数返回一个匹配的对象,而不是字符串的匹配部分.您必须明确提取该部分:
fileName = re.search(r'[^\\]*\.c$', fileName).group()
Run Code Online (Sandbox Code Playgroud)
演示:
>>> import re
>>> fileName = 'C:\\Users\\anandada\\workspace\\MyTestProject\\src\\OpenTest.c'
>>> re.search(r'[^\\]*\.c$', fileName).group()
'OpenTest.c'
Run Code Online (Sandbox Code Playgroud)