python - 检查字符串是否与python中的IP地址模式匹配?

标签 python

检查字符串是否匹配特定模式的最快方法是什么?正则表达式是最好的方法吗?

例如,我有一堆字符串,想检查每个字符串是否是有效的 IP 地址(在这种情况下有效意味着格式正确),是使用正则表达式执行此操作的最快方法吗?或者是否有更快的字符串格式或其他东西。

到目前为止,我一直在做这样的事情:

for st in strs:
    if re.match('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', st) != None:
       print 'IP!'

最佳答案

更新:下面的原始答案适用于 2011 年,但自 2012 年以来,使用 Python 的 ipaddress stdlib module 可能会更好- 除了检查 IPv4 和 IPv6 的 IP 有效性之外,它还可以做很多其他事情。 </update>

您似乎正在尝试 validate IP addresses .正则表达式可能不是最好的工具。

如果您想接受所有有效的 IP 地址(包括一些您可能甚至不知道有效的地址),那么您可以使用 IPy (Source) :

from IPy import IP
IP('127.0.0.1')

如果IP地址无效会抛出异常。

或者您可以使用 socket (Source) :

import socket
try:
    socket.inet_aton(addr)
    # legal
except socket.error:
    # Not legal

如果您真的只想匹配带有 4 个小数部分的 IPv4,那么您可以按点拆分并测试每个部分是否为 0 到 255 之间的整数。

def validate_ip(s):
    a = s.split('.')
    if len(a) != 4:
        return False
    for x in a:
        if not x.isdigit():
            return False
        i = int(x)
        if i < 0 or i > 255:
            return False
    return True

请注意,您的正则表达式不会执行此额外检查。它将接受 999.999.999.999作为有效地址。

关于python - 检查字符串是否与python中的IP地址模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3462784/

相关文章:

python - 无法在 python 2.7 上安装 pip,只有 python 3

python - 拆分数据并使用 Python 用实线和虚线绘制它们

python - 在 Python 3.3 上尝试 "repo init"时出现 TypeError

python - Django:确定用户是否投票

Python Mechanize : Traceback in br. submit()

python - 将 x 轴刻度更改为自定义字符串

python - 如何获得负数百分比的计数并按最大负数排序?

python - 如何在 python 2.x 交互模式下将参数传递给模块

python - Django:规范化用户提交的模型数据以在模板中显示

python - 通过python将目录中的图片发布到tumblr