首页 > 解决方案 > Python 3:使用带有列表 Windows 文件路径的正则表达式作为在特定位置具有数字的字符串

问题描述

我有一个按以下模式编写的 Windows 文件路径列表:

["C:\\folder\\a-file-001.jpg", "C:\\folder\\a-file-010.jpg", "C:\\folder\\a-file-bigger-001.jpg", "C:\\folder\\a-file-bigger-010.jpg"]

路径是使用变量构建的,所以我不声明原始字符串,我只能访问结果字符串和两者的连接:

path = "C:\\folder\\"
name = "a-file"
file_number = "001"
full_path = path + name + "-" + file_number + ".jpg"
#"C:\\folder\\a-file-001.jpg"
#Only path, name and file_number variables are accessible to me, I don't declare those strings

我想使用正则表达式来查找与模式“a-file-XXX.jpg”匹配的所有字符串,所以给我这个结果:

["C:\\folder\\a-file-001.jpg", "C:\\folder\\a-file-010.jpg"]

我想我应该用filter(r.match, list)它来做,但我找不到怎么做。

编辑:似乎我的问题不仅在于过滤器,还在于我试图比较的字符串:它们是 Windows 路径,我不知道双反斜杠需要在 Python 中进行特殊处理。

在尝试了前面的示例之后,我明白我应该使用list(filter(re.compile(path + name + "-\d{3}.jpg").match(full_path)),但是由于双反斜杠,我无法使其工作。我也相应地更新了示例。

标签: pythonregexstringpython-3.x

解决方案


import re

strings = ["C:\\folder\\a-file-001.jpg",
           "C:\\folder\\a-file-010.jpg",
           "C:\\folder\\a-file-bigger-001.jpg",
           "C:\\folder\\a-file-bigger-010.jpg"]

path = "C:\\folder\\"
name = "a-file"
regex = re.compile(re.escape(path + name) + "-\d{3}.jpg")
print(list(filter(regex.match, strings)))

re.escape将正确处理斜杠,以便模式的该部分中没有正则表达式元字符并且它是按字面意思匹配的。


推荐阅读