可以将这个简化为一个正则表达式吗

2024-04-26 14:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能把这些模式简化成一种模式?你知道吗

PRIV_LOC = re.compile("^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
PRIV_24 = re.compile("^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
PRIV_20 = re.compile("^192\.168\.\d{1,3}.\d{1,3}$")
PRIV_16 = re.compile("^172.(1[6-9]|2[0-9]|3[0-1]).[0-9]{1,3}.[0-9]{1,3}$")


def is_ip_private(ip):
    return PRIV_LOC.match(ip) or PRIV_24.match(ip) or PRIV_20.match(ip) or PRIV_16.match(ip)

Tags: oriprereturnisdefmatch模式
1条回答
网友
1楼 · 发布于 2024-04-26 14:21:24

你可以试试这个:

re.compile(r"^(127\.\d{1,3}\.\d{1,3}\.\d{1,3}|10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}.\d{1,3}|172.(1[6-9]|2[0-9]|3[0-1]).[0-9]{1,3}.[0-9]{1,3})$")

或者,为了不失去可读性:

re.compile(r"^(" + '|'.join([
    r"127\.\d{1,3}\.\d{1,3}\.\d{1,3}", # PRIV_LOC
    r"10\.\d{1,3}\.\d{1,3}\.\d{1,3}", # PRIV_24
    r"192\.168\.\d{1,3}.\d{1,3}", # PRIV_20
    r"172.(1[6-9]|2[0-9]|3[0-1]).[0-9]{1,3}.[0-9]{1,3}" # PRIV_16
]) + r")$")

相关问题 更多 >