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

Python正则替换以172开头的IP地址(大文件高效处理)

解决日志文件中隐藏172开头IP的问题

嘿,我来帮你搞定这个隐藏日志里IP的事儿!首先得说,你原来的正则表达式有点问题,没匹配到完整的IP,而且只处理了行首的内容,咱们来一步步修正,同时兼顾大文件的高效处理。

问题分析

你原来的代码里,r"^172\.*"这个正则只能匹配行开头的172,后面跟任意个点,这完全不是匹配完整IP的正确方式,而且替换成XXX.也达不到你想要的隐藏效果。另外,158MB的文件确实不适合一次性全读入内存,咱们用逐行处理的方式,既高效又省内存,而且完全不用额外的for循环或if判断,靠正则本身就能搞定所有匹配。

正确的解决方案

1. 编写正确的正则表达式

要匹配所有172开头的标准IP地址,正则应该写成:

r'\b172\.\d{1,3}\.\d{1,3}\.\d{1,3}\b'
  • \b是单词边界,避免把类似1720.1.1.1这种包含172的字符串误判成IP;
  • \d{1,3}匹配1到3位数字,对应IP的每个段;
  • 整个正则能精准匹配172.x.x.x格式的IP。

2. 大文件的高效处理代码

咱们用Python的文件上下文管理器(with语句)逐行读取文件,处理后写入新文件,这样内存只保留当前行的内容,不会因为文件大而卡顿:

import re

# 预编译正则,提升重复匹配的效率
ip_regex = re.compile(r'\b172\.\d{1,3}\.\d{1,3}\.\d{1,3}\b')

# 替换后的目标字符串
hidden_ip = 'XXX.XXX.XXX.XXX'

# 替换文件路径(根据你的实际路径修改)
input_log_path = 'your_original_log.txt'
output_log_path = 'your_hidden_ip_log.txt'

# 逐行处理文件
with open(input_log_path, 'r', encoding='utf-8') as in_file, open(output_log_path, 'w', encoding='utf-8') as out_file:
    for line in in_file:
        # 替换当前行中所有匹配的IP
        processed_line = ip_regex.sub(hidden_ip, line)
        out_file.write(processed_line)

为什么这个方案适合你?

  • 无需额外循环/判断:re.sub会自动扫描当前行的所有匹配项并替换,不用你手动遍历字符或做条件判断;
  • 内存友好:逐行处理不会把158MB的文件全塞进内存,运行更流畅;
  • 效率高:预编译正则(re.compile)让重复匹配的速度更快,适合处理大文件。

测试验证

用你给出的示例文本测试的话,运行这段代码后,就能得到你期望的输出:

ABCDEFGHIJKLMNOPRSTXXX.XXX.XXX.XXXRSTUVYZ ASDGXXX.XXX.XXX.XXXFSDGHSFSDFDSFHSF !'%%&!'+!'+%&!ÂSDBSDFXXX.XXX.XXX.XXXSADASFSA ASGFGD XXX.XXX.XXX.XXX ASDSAFASFDASSADSA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:28:11