gpt4 book ai didi

python - python使用正则表达式删除重复字符串

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:44 25 4
gpt4 key购买 nike

我有一个 .txt 文件,其中生成了许多 Snort 警报。我想搜索此文件并删除重复的警报,每个警报只保留一个。到目前为止,我正在使用以下代码:

with open('SnortReportFinal', 'r') as f:
file_lines = f.readlines()

cont_lines = []
for line in range(len(file_lines)):
if re.search('\d:\d+:\d+', file_lines[line]):
cont_lines.append(line)

for idx in cont_lines[1:]: # skip one instance of the string
file_lines[idx] = "" # replace all others

with open('SnortReportFinal', 'w') as f:
f.writelines(file_lines)

正则表达式匹配我正在搜索的字符串,即 1:234:5,如果它找到同一字符串的多个实例,我希望它删除它们并只保留一个。这不起作用,因为所有其他字符串都被删除并且它只保留一个与表达式匹配的字符串。

文件包含这样的文本:

[1:368:6] ICMP PING BSDtype [**]
[1:368:6] ICMP PING BSDtype [**]
[1:368:6] ICMP PING BSDtype [**]
[1:368:6] ICMP PING BSDtype [**]

[1:368:6] 部分可能是数字的变体,即 [1:5476:5]。

我希望我的预期输出只有:

[1:368:6] ICMP PING BSDtype [**]
[1:563:2] ICMP PING BSDtype [**]

其余的字符串被删除,剩下的我的意思是数字的差异很好,但不是重复的数字。

最佳答案

看来您真的不需要正则表达式。要简单地删除重复项:

alerts = set(f.readlines())

这会将文件中的行列表转换为一个集合,从而删除重复项。从这里您可以直接将设置写回您的文本文件。

或者,您可以直接在文件对象上调用 set,正如 Padraic Cunningham 在评论中指出的那样:

alerts = set(f)

关于python - python使用正则表达式删除重复字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29084855/

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