Python 这可以减少到一个正则表达式吗

Python 这可以减少到一个正则表达式吗,python,regex,performance,Python,Regex,Performance,是否有可能将这些模式简化为一种模式 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]

是否有可能将这些模式简化为一种模式

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)
您可以尝试以下方法:

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")$")

你到底想得到什么?我想确定这个地址是不是私人地址。你很清楚知道怎么做,或者是在正则表达式中,所以当然可以合并。但是对可读性的影响可能没有什么帮助