正则表达式提取文件路径末尾文件名的问题及优化需求
解决路径末尾文件名提取问题
问题分析
你的原正则表达式\\[\w-]+\.\w{3}会优先匹配路径中第一个出现的符合格式的文件,导致第一个路径里误捕获了KeyFinderInstaller.exe而非末尾的OCSetupHlp.dll;同时re.sub('\\\\','', ...)的方式只是去除匹配结果里的反斜杠,无法解决匹配位置错误的核心问题。
解决方案
推荐两种可靠的实现方式:
方案1:优化正则表达式
通过正则匹配最后一个反斜杠之后的文件名,并忽略后续可能的非路径字符(比如括号):
import re logs = ['C:\\Users\\Administrator\\Desktop\\KeyFinderInstaller.exe({tmp}\\OCSetupHlp.dll)', 'F:\\NOKIA N70\\RICAMI\\700 ESEMPI\\PCStitch 7.0.13 + Keygen(programma per punto croce)\\keygen.exe', 'F:\\Programmi & Utility Pc\\Nero 8 (conversione film & creazione videosuonerie)\\keygen.exe', 'C:\\Users\\user\\Desktop\\BloodHound-win32-x64\\BloodHound-win32-x64\\resources\\app\\Collectors\\SharpHound.exe', 'C:\\Users\\user\\Desktop\\BloodHound-win32-x64\\BloodHound-win32-x64\\resources\\app\\Collectors\\DebugBuilds\\SharpHound.ps1' ] filename = [re.search(r'\\([\w-]+\.\w{3,})[^\\]*$', log).group(1) for log in logs] print(filename)
正则说明:
\\:匹配路径中的反斜杠([\w-]+\.\w{3,}):捕获文件名(支持字母/数字/下划线/连字符,后缀长度≥3,覆盖exe、dll、ps1等格式)[^\\]*$:匹配文件名之后直到字符串结尾的所有非反斜杠字符(比如第一个路径里的))group(1):直接获取捕获到的文件名,无需额外去除反斜杠
方案2:用字符串/OS模块处理(更稳健)
路径处理推荐用专门的字符串操作,避免正则的边缘情况:
logs = ['C:\\Users\\Administrator\\Desktop\\KeyFinderInstaller.exe({tmp}\\OCSetupHlp.dll)', 'F:\\NOKIA N70\\RICAMI\\700 ESEMPI\\PCStitch 7.0.13 + Keygen(programma per punto croce)\\keygen.exe', 'F:\\Programmi & Utility Pc\\Nero 8 (conversione film & creazione videosuonerie)\\keygen.exe', 'C:\\Users\\user\\Desktop\\BloodHound-win32-x64\\BloodHound-win32-x64\\resources\\app\\Collectors\\SharpHound.exe', 'C:\\Users\\user\\Desktop\\BloodHound-win32-x64\\BloodHound-win32-x64\\resources\\app\\Collectors\\DebugBuilds\\SharpHound.ps1' ] filename = [] for log in logs: # 定位最后一个反斜杠的位置 last_backslash_idx = log.rfind('\\') if last_backslash_idx != -1: # 截取反斜杠后的内容 target = log[last_backslash_idx + 1:] # 移除末尾可能存在的括号(适配第一个路径的特殊格式) if target.endswith(')'): target = target[:-1] filename.append(target) print(filename)
优势:
- 可读性更强,逻辑直观
- 能兼容更多特殊路径格式(比如带括号、特殊符号的路径)
输出结果
两种方案都能得到你期望的输出:
['OCSetupHlp.dll', 'keygen.exe', 'keygen.exe', 'SharpHound.exe', 'SharpHound.ps1']
内容的提问来源于stack exchange,提问作者OverflowStack
相关产品推荐
相关产品推荐

