You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式提取文件路径末尾文件名的问题及优化需求

解决路径末尾文件名提取问题

问题分析

你的原正则表达式\\[\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:15:17