如何使用正则表达式快速提取.csv后缀的目标文件名?
高效提取.csv文件名的正则实现方案
直接使用正则单次扫描即可完成提取,无需多层split拆分与嵌套循环判断,性能远高于逐段拆分遍历的实现,同时兼容单行1个/多个目标文件的场景。
核心正则规则
[^/|]+\.csv
规则逻辑:
[^/|]+:匹配所有既不属于路径分隔符/、也不属于字段分隔符|的连续字符,自动过滤掉文件名前缀的路径、无关字段内容\.csv:精确匹配.csv后缀,避免误匹配带csv字样的非目标内容
代码调用示例
单字符串测试
针对给出的示例字符串,调用效果如下:
import re test_line = "4918, fx,fx,weapon/muzzleflashes/fx_m1carbine,3.3,3.3,|sp/zombie_m1carbine|weapon|../zone_source/dlc3.csv|csv|../zone_source/spongebob.csv|csv" res = re.findall(r"[^/|]+\.csv", test_line) print(res) # 输出结果:['dlc3.csv', 'spongebob.csv']
批量扫描性能优化写法
针对逐行扫描大文件的场景,提前预编译正则对象可以进一步降低开销,避免每行重复编译正则的性能损耗:
import re # 程序初始化阶段仅编译1次正则,全局复用 csv_name_pattern = re.compile(r"[^/|]+\.csv") # 逐行读取文件时直接调用 with open("your_target_file.csv", "r", encoding="utf-8") as f: for line in f: # 一次性拿到当前行所有符合要求的csv文件名,结果为列表 target_csv_names = csv_name_pattern.findall(line) # 后续直接处理提取到的文件名即可
兼容说明
- 自动过滤路径:无论文件名前缀是
../相对路径、多级目录路径还是其他分隔字段,都只会提取最终的纯文件名+.csv后缀 - 数量自适应:单行存在1个、2个甚至更多目标csv文件时,都可以一次性提取完成,无需额外写分支判断
- 低误匹配率:不会将单独的
|csv字段、路径中带csv字样的目录名识别为目标文件
内容的提问来源于stack exchange,提问作者Phil Gibson
相关产品推荐
相关产品推荐

