从html字符串中提取IP地址(python)

GoJ*_*ian 25 python regex string

我的朋友,

我真的想用Python从字符串中提取一个简单的IP地址(实际上是一行的html).但事实证明,2小时过去了,我仍然无法找到一个好的解决方案.

>>> s = "<html><head><title>Current IP Check</title></head><body>Current IP Address: 165.91.15.131</body></html>"
Run Code Online (Sandbox Code Playgroud)

- '165.91.15.131'是我想要的!

我尝试使用正则表达式,但到目前为止我只能使用第一个数字.

>>> import re
>>> ip = re.findall( r'([0-9]+)(?:\.[0-9]+){3}', s )
>>> ip
['165']
Run Code Online (Sandbox Code Playgroud)

事实上,我并不觉得我对reg-expression有一个牢固的把握,上面的代码是从网上的其他地方找到并修改过来的.

寻求您的意见和建议!

Mar*_*ers 55

删除您的捕获组:

ip = re.findall( r'[0-9]+(?:\.[0-9]+){3}', s )
Run Code Online (Sandbox Code Playgroud)

结果:

['165.91.15.131']
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 如果您正在解析HTML,那么查看BeautifulSoup可能是个好主意.
  • 您的正则表达式匹配一些无效的IP地址,例如0.00.999.9999.这不一定是个问题,但您应该了解它并可能处理这种情况.您可以将+to 更改{1,3}为部分修复,而不会使正则表达式过于复杂.

  • 您可以使用正则表达式只接受有效的 IP 地址 "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9] [0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9] ?)\\b" (2认同)

Sne*_*hal 6

您可以使用以下正则表达式仅捕获有效的IP地址

re.findall(r'\b25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\b',s)
Run Code Online (Sandbox Code Playgroud)

回报

['165', '91', '15', '131']
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,这与有效的 IP 地址不匹配,但与有效的八位字节匹配。它们可以有任意数量,可能需要在单独的步骤中进行检查。 (2认同)