【发布时间】:2021-04-08 14:34:59
【问题描述】:
我想了解如何从很长的字符串中仅提取正确 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.5344 和99.99.99.100,但1.2.3.5344 不是IP 地址,因为它有3 个以上的连续数字。
【问题讨论】:
-
您只需要一些边界,例如 $ 或 \s,\b 来包装有效 IP:
\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.\d{1,3}\b -
它确实不打印 1.2.3.5344。但是它会打印 1.2.3.534,这是您的正则表达式的有效表达式(但不是有效的 IP 地址,因为它高于 255)。问题是它后面跟着另一个数字。您可以使用前瞻并要求下一个字符 not 是数字,以避免找到 1.2.3.534 如果这是您想要的。
-
谢谢,IWHKYB!有效。但是 JohanL,我如何检查下一个字符是否是数字?
标签: python python-3.x regex