python - 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))
,但是由于双反斜杠,我无法使其工作。我也相应地更新了示例。
解决方案
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
将正确处理斜杠,以便模式的该部分中没有正则表达式元字符并且它是按字面意思匹配的。
推荐阅读
- jquery - 输入带有html标签的php变量时,jquery .html会引发错误
- python - 为神经网络训练准备 y_target 变量
- ruby-on-rails - 每天过期的数据如何处理?
- sql - PostgreSQL - 如何保持列更新
- javascript - 解决 React JS 中的 API 调用问题(400 错误)
- ios - 除非我将视图添加到容器视图而不是 contentView,否则 UITableViewCell 不起作用
- amazon-web-services - 在从 CloudWatch 事件触发 AWS CodeBuild 时指定源分支
- numpy - 给定其他两个值,从 1x3 numpy 数组中提取值
- r - ggplot2 scale_fill_gradient()函数不改变点颜色R
- python - 连接熊猫的选择列,同时忽略列中的空白