Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何编写正则表达式来替换类似散列的字符串_Python_Regex_Windows_Path - Fatal编程技术网

Python 如何编写正则表达式来替换类似散列的字符串

Python 如何编写正则表达式来替换类似散列的字符串,python,regex,windows,path,Python,Regex,Windows,Path,有些windows名称和文件夹包含以下名称: c:\windows\serviceprofiles\localservice\appdata\locallow\microsoft\cryptneturlcache\metadata\57c8edb95df3f0ad4ee2dc2b8cfd4157 c:\windows\system32\config\systemprofile\appdata\locallow\microsoft\cryptneturlcache\metadata\be7ffd2

有些windows名称和文件夹包含以下名称:

c:\windows\serviceprofiles\localservice\appdata\locallow\microsoft\cryptneturlcache\metadata\57c8edb95df3f0ad4ee2dc2b8cfd4157 c:\windows\system32\config\systemprofile\appdata\locallow\microsoft\cryptneturlcache\metadata\be7ffd2fd84d3b32fd43dc8f575a9f28 c:\windows\softwaredistribution\download\ab1b092b40dee3ba964e8305ecc7d0d9

注意它们是如何以看起来像散列的字符串结尾的:

57c8edb95df3f0ad4ee2dc2b8cfd4157,be7ffd2fd84d3b32fd43dc8f575a9f28, ab1b092b40dee3ba964e8305ecc7d0d9

我不擅长使用正则表达式,我想知道是否有一种方法可以编写一个正则表达式,用类似

“散列”

路径不一定以这些结束,因为这些通常是包含自己的其他文件夹的文件夹/子文件夹。 因此,我的目标是基本上得到一条如下所示的路径:

c:\windows\serviceprofiles\localservice\appdata\locallow\microsoft\cryptneturlcache\metadata\57c8edb95df3f0ad4ee2dc2b8cfd4157\some_子文件夹\some_文件.inf

成为:

c:\windows\serviceprofiles\localservice\appdata\locallow\microsoft\cryptneturlcache\metadata\

在Python中有这样做的方法吗

提前感谢。

如果您注意到,“哈希”是32个字符。(如果这对所有人都适用,那么正则表达式就相当简单了

例如,您发布的最后一个字符串

import re

text = 'c:\windows\serviceprofiles\localservice\appdata\locallow\microsoft\cryptneturlcache\metadata\\57c8edb95df3f0ad4ee2dc2b8cfd4157\some_subfolder\some_file.inf'
res = re.sub('\w{32}', '##HASH##', text)


print(res)
印刷品:

c:\windows\serviceprofiles\localserviceppdata\locallow\microsoft\cryptneturlcache\metadata\##HASH##\some_subfolder\some_file.inf
注意我是如何用
\\5
转义的,这是告诉python它是一个文本
\5
所必需的

\w{32}
正则表达式的意思是“将任何单词字符精确匹配32次”

如果您注意到,“哈希”是32个字符。(如果这对所有人都适用,那么正则表达式就相当简单了

例如,您发布的最后一个字符串

import re

text = 'c:\windows\serviceprofiles\localservice\appdata\locallow\microsoft\cryptneturlcache\metadata\\57c8edb95df3f0ad4ee2dc2b8cfd4157\some_subfolder\some_file.inf'
res = re.sub('\w{32}', '##HASH##', text)


print(res)
印刷品:

c:\windows\serviceprofiles\localserviceppdata\locallow\microsoft\cryptneturlcache\metadata\##HASH##\some_subfolder\some_file.inf
注意我是如何用
\\5
转义的,这是告诉python它是一个文本
\5
所必需的

\w{32}
正则表达式表示“将任何单词字符精确匹配32次”

这可能有助于:

import os
import re
uuid = re.compile('[0-9a-f]{30}\Z', re.I)

A = "c:\windows\serviceprofiles\localservice\appdata\locallow\microsoft\cryptneturlcache\metadata\57c8edb95df3f0ad4ee2dc2b8cfd4157\sub_folder"

path = os.path.normpath(A)
path = path.split(os.sep)
path = "\\".join(["##"+i+"##" if uuid.match(i) else i for i in path])
print path
结果:

c:\windows\serviceprofiles\localserviceppdata\locallow\microsoft\cryptneturlcache\metadata\##c8edb95df3f0ad4ee2dc2b8cfd4157##\sub_folder
注意:我编译的长度为30个字符。您可以在re.compile中修改该值,这可能会有帮助:

import os
import re
uuid = re.compile('[0-9a-f]{30}\Z', re.I)

A = "c:\windows\serviceprofiles\localservice\appdata\locallow\microsoft\cryptneturlcache\metadata\57c8edb95df3f0ad4ee2dc2b8cfd4157\sub_folder"

path = os.path.normpath(A)
path = path.split(os.sep)
path = "\\".join(["##"+i+"##" if uuid.match(i) else i for i in path])
print path
结果:

c:\windows\serviceprofiles\localserviceppdata\locallow\microsoft\cryptneturlcache\metadata\##c8edb95df3f0ad4ee2dc2b8cfd4157##\sub_folder

注意:我编译的长度为30个字符。您可以在re.compile中修改该值。使用可微调模式。使用可微调模式。
\w
类包含许多哈希值中从未找到的字符。哦,这很简单。现在我觉得有点傻。谢谢再次您好,我注意到它现在还匹配了路径,如:c:\windows\system32\tasks\microsoft\windows\shell\WindowsParentalControl迁移,并将它们转换为:c:\windows\system32\tasks\microsoft\windows\shell\#HASH####如何改进re,使其名称中至少有一位数字或k位数字。谢谢。您可以使用负前瞻
(?=.*\d)[a-z\d]{32}
。如果您需要进一步调整正则表达式,请使用此选项,您可以编辑正则表达式并在realtimeCool中查看结果,谢谢。如果我还有什么不清楚的地方,你认为我可以在评论部分打扰你吗?
\w
类包含许多在散列值中找不到的字符。哦,这很简单。现在我觉得有点傻。谢谢再次您好,我注意到它现在还匹配了路径,如:c:\windows\system32\tasks\microsoft\windows\shell\WindowsParentalControl迁移,并将它们转换为:c:\windows\system32\tasks\microsoft\windows\shell\#HASH####如何改进re,使其名称中至少有一位数字或k位数字。谢谢。您可以使用负前瞻
(?=.*\d)[a-z\d]{32}
。如果您需要进一步调整正则表达式,请使用此选项,您可以编辑正则表达式并在realtimeCool中查看结果,谢谢。如果我还有什么不清楚的地方,你认为我可以在评论区打扰你吗?