如何提取IPAddressesTEST.log中指定语句后的IPv6地址信息?
问题分析与解决方案
原代码的问题
原代码将每行字符串转为迭代器后遍历,实际是逐个遍历字符,不可能匹配到完整的Connected IPv6's:字符串,这是导致代码失效的核心原因。
正确实现方式
方式1:前缀匹配提取
直接遍历日志每行,判断是否包含目标前缀,提取前缀后的IPv6地址:
target_prefix = "Connected IPv6's:" with open('C:/test/IPAddressesTEST.log', "rt") as ip_log: for line in ip_log: line = line.strip() # 去除首尾空白与换行符 if line.startswith(target_prefix): # 截取前缀后的内容并清理空格 ipv6_addr = line[len(target_prefix):].strip() print(ipv6_addr) break # 仅提取第一个匹配项,若需全部匹配可删除此行
方式2:正则表达式匹配(更灵活)
如果前缀与IPv6地址间的空格不固定,用正则适配更多格式:
import re # 匹配前缀后任意空格+IPv6地址的模式 pattern = r"Connected IPv6's:\s*(.*)" with open('C:/test/IPAddressesTEST.log', "rt") as ip_log: for line in ip_log: match_result = re.search(pattern, line) if match_result: ipv6_addr = match_result.group(1).strip() print(ipv6_addr) break
补充说明
- 方式1逻辑简单,适合前缀固定且与IPv6地址同行的场景。
- 方式2通过正则可处理前缀与地址间的任意空白字符,兼容性更强。
内容的提问来源于stack exchange,提问作者Icewolf
相关产品推荐
相关产品推荐

