首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这可以简化为一个正则表达式吗?

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

Stack Overflow用户
提问于 2017-07-21 19:46:03
回答 1查看 73关注 0票数 0

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

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-21 20:03:14

你可以试试这个:

代码语言:javascript
复制
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})$")

或者说,不要失去太多的可读性:

代码语言:javascript
复制
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")$")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45245614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档