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

Python re正则匹配异常:TEMP目录下带Zone ID的exe文件匹配问题

搞定%TEMP%目录下带Zone.Identifier的.exe文件正则匹配问题

嘿,我来帮你分析下为什么filepath1匹配失败,而filepath2成功,以及怎么修正这个正则表达式~

问题出在哪?

你的代码里有两个核心问题导致了匹配不一致:

  1. 路径字符串的转义坑:你定义filepath1和filepath2时没加r(原始字符串标记),Python会把路径里的反斜杠当成转义字符处理。比如\U会被尝试解析成Unicode转义,这直接导致实际存储的路径和你写的不一样,正则自然匹配不上。
  2. 正则的匹配范围写错了:你用的[^.]*是匹配除了点之外的所有字符,但咱们要的是匹配Temp目录下的任意文件名(哪怕文件名里有多个点也没关系),直到.exe:Zone.Identifier。正确的应该是匹配除了路径分隔符(反斜杠)之外的所有字符,因为反斜杠是目录的分隔,文件名里的其他字符都应该被允许。

修复后的完整代码

直接看修正后的代码吧,我把两个问题都解决了:

#!/usr/bin/env python
try:
    import re2 as re
except ImportError:
    import re

# 加r用原始字符串,避免反斜杠被转义
filepath1 = r"C:\Users\Administrator\AppData\Local\Temp\77ce4ba2a605e22b8699eef874d075fb585d259ed6cade2e503e6dbf58020aa0.exe:Zone.Identifier"
filepath2 = r"C:\Users\Administrator\AppData\Local\Temp\svchost.exe:Zone.Identifier"

# 同样用原始字符串写正则,把[^.]*换成[^\\]*匹配任意文件名
re_pattern = re.compile(r"C:\\Users\\[^\\]*\\AppData\\Local\\Temp\\[^\\]*\.exe:Zone\.Identifier")

print("1: " + str(re_pattern.search(filepath1)))
print("2: " + str(re_pattern.search(filepath2)))

关键修改说明

  • 原始字符串(r前缀):这是处理Windows路径和正则的必备操作!加了r之后,Python就不会把反斜杠当成转义字符,路径和正则里的反斜杠都会被当作普通字符处理,避免各种莫名其妙的匹配失败。
  • 正则匹配范围调整:把[^.]*改成[^\\]*,这样就能匹配Temp目录下的任何文件名(不管有没有点),只要后面跟着.exe:Zone.Identifier就行。
  • 简化转义逻辑:用原始字符串写正则,你只需要写\\来匹配一个反斜杠,不用再考虑Python层面的额外转义,写起来更省心。

更灵活的匹配方案(可选)

如果你想适配更多场景(比如不同系统的Temp目录位置可能略有不同,或者大小写差异),可以试试这个更通用的正则:

re_pattern = re.compile(r".*Temp\\[^\\]*\.exe:Zone\.Identifier", re.IGNORECASE)

这个正则会忽略大小写,而且能匹配任何包含Temp目录的路径下的目标文件,适用性更广~

内容的提问来源于stack exchange,提问作者Brae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:41:32