gpt4 book ai didi

python - 如何使用 REGEX 查找长字符串中的 IP 地址?

转载 作者:行者123 更新时间:2023-12-01 00:41:50 27 4
gpt4 key购买 nike

我想知道如何从很长的字符串中仅提取正确 IP 地址。问题是我的代码提取了 IP 地址,即使其中一部分超过 3 位数字(这是不正确的)。

我试图了解有关 Python REGEX 的更多信息,但我不知道如何在点后最多 3 个连续数字处停止它。我的意思是,如果 IP 是 1.2.3.4 它会正确找到它,这确实是正确的,但如果 IP 是 1.2.3.4567 它也会正确找到它,这是不正确的。我不知道该怎么说如果一个组超过 3 位数字,那么它就不是 IP 地址。

import re

secv = "akmfiawnmgisa gisamgisamgsagr[sao l321r1m r2p4 2342po4k2m4 22.33.4.aer 1.2.3.5344 99.99.99.100 asoifinagf sadgsangidsng sg"

b = re.findall(r"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.\d{1,3}", secv)

print(b)

它打印 1.2.3.534499.99.99.100,但 1.2.3.5344 不是一个 IP 地址,因为它有超过 3 个连续数字。

最佳答案

import re

secv = "90.123.1.100 akmfiawnmgisa gisamgisamgsagr[sao l321r1m r2p4 2342po4k2m4 22.33.4.aer 1.2.3.5344 99.99.99.100 asoifinagf sadgsangidsng sg 13.18.19.100 1.2.3.4"

b = re.findall(r"(?:\s|\A)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?=\s|\Z)",secv)

b = list(filter(lambda x: all([int(y) <= 255 for y in x.split('.')]), b))


print(b)

为了让它更有趣,我在字符串的开头和结尾添加了 IP 地址。我假设 IP 地址如果不在字符串的开头或结尾,则需要在两侧用空格分隔。因此,我在正则表达式的开头添加了一个非捕获组 (?:\s|\A) ,它将匹配空格字符的开头字符串。我还在正则表达式的末尾添加了一个前瞻断言 (?=\s|\Z),它将匹配单个空白字符或行尾而不消耗任何字符。打印出上面的内容:

['90.123.1.100', '99.99.99.100', '13.18.19.100', '1.2.3.4']

关于python - 如何使用 REGEX 查找长字符串中的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57288336/

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