意外结束正则表达式

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

Mar*_*ers 5

你需要加倍的一倍逃脱再次,改用原始字符串:

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)