如何从HTML字符串中提取IP地址?
我想用Python从一个字符串中提取出一个IP地址(其实是一个单行的HTML)。
>>> s = "<html><head><title>Current IP Check</title></head><body>Current IP Address: 165.91.15.131</body></html>"
-- 我想要的就是'165.91.15.131'!
我试着用正则表达式,但到目前为止我只能提取到第一个数字。
>>> import re
>>> ip = re.findall( r'([0-9]+)(?:\.[0-9]+){3}', s )
>>> ip
['165']
不过我对正则表达式还不是很熟悉;上面的代码是我在网上找到的,然后稍微修改了一下。
6 个回答
4
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,当你在写代码时,可能会发现某个功能没有按照预期工作。这时候,很多人会选择去网上查找答案,像是StackOverflow这样的论坛就是一个很好的地方。在这里,程序员们会分享他们的经验和解决方案,帮助其他人解决类似的问题。
在这些讨论中,大家通常会描述他们遇到的具体情况,提供一些代码示例,甚至会解释他们尝试过的解决办法。如果你是编程新手,看到这些内容可能会觉得有点复杂,但其实只要慢慢理解,就能学到很多东西。
总之,StackOverflow是一个很有用的资源,特别是当你在编程过程中遇到困难时,记得去看看,或许能找到你需要的答案。
import re
ipPattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
findIP = re.findall(ipPattern,s)
findIP contains ['165.91.15.131']
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)
返回结果是:
['165', '91', '15', '131']
75
去掉你的捕获组:
ip = re.findall( r'[0-9]+(?:\.[0-9]+){3}', s )
结果:
['165.91.15.131']
注意事项:
- 如果你在解析HTML,建议看看BeautifulSoup这个工具。
- 你的正则表达式会匹配一些无效的IP地址,比如
0.00.999.9999
。这不一定是个问题,但你需要注意这个情况,可能还需要处理一下。你可以把+
改成{1,3}
,这样可以部分解决问题,同时又不会让正则表达式变得太复杂。