尝试使用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表示无,而2表示匹配,但就我可以解决而言,它们都应该匹配。可能只是一个愚蠢的错误,但如果有人能发现它会很棒。
基本上,该模式应匹配任何.exe与%TEMP%目录中的区域ID,无论用户名是什么
答案 0 :(得分:3)
问题是其中一条路径以7
开头,如果您在控制台中尝试\7
,您会发现它被解释为代码,因为你没有使用原始前缀作为文字。
>>> print("\7")
<some garbage char, bell?>
>>> print(r"\7")
\7
这说明你的正则表达式并不适用于那个特定的路径(对于你的另一个路径而言,#34;幸运&#34;因为你正在使用Python 2和\
+任何上面的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
答案 1 :(得分:1)
抱歉,我误解了你的问题。
<_sre.SRE_Match object at 0x03176AE0>
<_sre.SRE_Match object at 0x03176AE0>
<强>输出:强>
r
请注意文件路径开头的原始字符串({{1}})