我的朋友们,
我真的想用Python从字符串中提取一个简单的IP地址(实际上是一行的html)。但事实证明,2小时过去了,我仍然无法找到一个好的解决方案。
>>> 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']
事实上,我并不认为我对reg-expression有一个牢固的把握,上面的代码是从网上的其他地方找到并修改过的。
寻求您的意见和建议!
答案 0 :(得分:49)
删除您的捕获组:
ip = re.findall( r'[0-9]+(?:\.[0-9]+){3}', s )
结果:
['165.91.15.131']
注意:
0.00.999.9999
。这不一定是个问题,但您应该了解它并可能处理这种情况。您可以将+
更改为{1,3}
以进行部分修复,而不会使正则表达式过于复杂。答案 1 :(得分: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']
答案 2 :(得分:4)
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']
答案 3 :(得分:2)
从日志中找到IP地址的最简单方法..
>>>-1%10
9
在[42]中:info
Out [42]:[&#39; 165.91.15.131&#39;]
答案 4 :(得分:2)
您可以使用以下正则表达式来提取有效的IP而不会出现错误
1.有些检测到123.456.789.111
为有效的IP
2.有些人没有将127.0.00.1
视为有效的知识产权
3.有些人不会像08.8.8.8
所以在这里我发布一个适用于所有上述条件的正则表达式。
注意:我已经提取了超过2百万个IP而没有任何跟随正则表达式的问题。
(?:(?:1\d\d|2[0-5][0-5]|2[0-4]\d|0?[1-9]\d|0?0?\d)\.){3}(?:1\d\d|2[0-5][0-5]|2[0-4]\d|0?[1-9]\d|0?0?\d)
答案 5 :(得分:1)
我就是这样做的。我觉得它很干净
import re
import urllib2
def getIP():
ip_checker_url = "http://checkip.dyndns.org/"
address_regexp = re.compile ('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
response = urllib2.urlopen(ip_checker_url).read()
result = address_regexp.search(response)
if result:
return result.group()
else:
return None
get_IP()将ip返回到字符串或None
如果您希望更准确的解析或更改Web服务提供商,则可以将address_regexp替换为其他正则表达式。