如何从下划线分隔的字符串中提取末尾带下划线的目标文件名
文件名提取解决方案
核心匹配规则
输入字符串符合以下结构:可选多段下划线分隔的前缀 + 目标文件名 + _. + 文件后缀,要求提取目标文件名加后缀作为结果,参考示例:
Abc_12_test_.pdf→ 输出test.pdfbc_122_testfile_.pdf→ 输出testfile.pdftest_.xlsx→ 输出test.xlsx
实现代码
原有代码存在逻辑缺陷:先按下划线分割取最后一段会直接丢失目标文件名部分,正则未锚定末尾容易误匹配,也没有处理匹配失败的异常场景。推荐使用如下正则方案直接匹配目标部分:
import re def extract_filename(raw_str): # 正则锚定字符串末尾,匹配「目标名_.后缀」格式 # 如需支持多后缀(如.tar.gz),可将正则改为 r'([^_]+)_\.(.+)$' match_res = re.search(r'([^_]+)_\.([a-zA-Z0-9]+)$', raw_str) if match_res: return f"{match_res.group(1)}.{match_res.group(2)}" # 不符合匹配规则时可按业务需求调整返回逻辑,此处默认返回原字符串 return raw_str
调用示例
print(extract_filename("Abc_12_test_.pdf")) # 输出 test.pdf print(extract_filename("bc_122_testfile_.pdf")) # 输出 testfile.pdf print(extract_filename("test_.xlsx")) # 输出 test.xlsx print(extract_filename("proj_module_v2_report_.docx")) # 输出 report.docx
内容的提问来源于stack exchange,提问作者Andrew D
相关产品推荐
相关产品推荐

