python - Python 正则表达式搜索网络掩码
问题描述
我在网上找到了一些匹配 IP 地址的正则表达式。我使用了看起来最好的那个,然后将其更改为匹配该 IP 地址的网络掩码。这是我的代码:
prefix = 'None' while re.search(r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$', prefix) is None: prefix = raw_input('\n\n Enter the prefix (destination IP) > ') mask = 'None' while re.search(r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|0?)$', mask) is None: mask = raw_input('\n\n Enter the network mask > ')
我在www.regexr.com中测试了两个正则表达式并且都工作正常,但是当我运行我的脚本时,Python 解释器在变量中找不到匹配项mask
,即使我插入了一个有效的掩码,如255.255.255.0
. 因此,它总是在第二个问题上循环。
这里有什么问题 ?我不应该使用“搜索”选项吗?
总而言之:我需要验证用户提供的网络掩码。它可以介于0.0.0.0
和之间,255.255.255.255
并且总是有 4 个由点分隔的元素。
解决方案
将您的正则表达式更改为:r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$', prefix
问题是在原始表达式中,\.
它只是 OR 运算符中一种可能模式的一部分。
您可以预编译它(使用re.compile
),因为它被多次使用。
推荐阅读
- python - 禁用“@tf.function”装饰器进行调试?
- node.js - Hapi 在发布请求时设置 cookie
- javascript - 如何克服 PHP codeIgniter 中的 MIME 类型
- react-native - 当我在选择器中调用 setstate 时,它会更改两次值
- java - 如何添加超过 1 个任务
- rest - 登录/注册表单的 REST 资源
- neo4j - 根据 Neo4J 中的节点属性使用不同的分析器
- python - 在 Python 中与 CSV 不同的选项卡中在同一浏览器上打开 URL
- python - 用于捕获科学引文的 RegEx
- sql - 使用视图对数据进行排名