gpt4 book ai didi

python - Python re 的正则表达式问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:49 24 4
gpt4 key购买 nike

尝试使用 python re 包查找具有特定模式的文件名。得到了一个小测试脚本,其中所有值都被硬编码了,但这不是正常使用:

#!/usr/bin/env python

try:
import re2 as re
except ImportError:
import re

filepath1 = "C:\Users\Administrator\AppData\Local\Temp\77ce4ba2a605e22b8699eef874d075fb585d259ed6cade2e503e6dbf58020aa0.exe:Zone.Identifier"
filepath2 = "C:\Users\Administrator\AppData\Local\Temp\svchost.exe:Zone.Identifier"
re_pattern = re.compile("C\:\\\\Users\\\\[^\\\\]*\\\\AppData\\\\Local\\\\Temp\\\\[^.]*\.exe\:Zone\.Identifier")

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

出于某种原因,这会为 1 返回 None 并为 2 返回匹配项,但据我所知,它们应该是匹配的。可能只是一个愚蠢的错误,但如果有人能发现它,那就太棒了。

基本上,该模式应该与 %TEMP% 目录中具有区域 ID 的任何 .exe 匹配,无论用户名如何

最佳答案

问题是其中一个路径以 7 开头,如果您在控制台中尝试 \7,您会看到它被解释为代码,因为您没有对文字使用原始前缀

>>> print("\7")
<some garbage char, bell?>
>>> print(r"\7")
\7

这说明您的正则表达式不适用于该特定路径(对于您“幸运”的另一条路径,因为您使用的是 Python 2 并且 \+any upper char 不是特定的转义序列,因此它不会改变(在 python 3 中,\U 被解释!)

现在,对于路径,在这个简单的例子中,您可以使用 fnmatch 来匹配通配符而不是正则表达式:

import fnmatch

filepath1 = r"C:\Users\Administrator\AppData\Local\Temp\77ce4ba2a605e22b8699eef874d075fb585d259ed6cade2e503e6dbf58020aa0.exe:Zone.Identifier"
filepath2 = r"C:\Users\Administrator\AppData\Local\Temp\svchost.exe:Zone.Identifier"
filepath3 = r"C:\Urs\Administrator\AppData\Local\Temp\svchost.exe:Zone.Identifier"

for f in (filepath1,filepath2,filepath3):
print(f,fnmatch.fnmatch(f,r"C:\Users\*\AppData\*\Temp\*.exe:Zone.Identifier"))

打印:

C:\Users\Administrator\AppData\Local\Temp\77ce4ba2a605e22b8699eef874d075fb585d259ed6cade2e503e6dbf58020aa0.exe:Zone.Identifier True
C:\Users\Administrator\AppData\Local\Temp\svchost.exe:Zone.Identifier True
C:\Urs\Administrator\AppData\Local\Temp\svchost.exe:Zone.Identifier False

关于python - Python re 的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50569760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com