【问题标题】:Python Regex search for Network Mask [duplicate]Python正则表达式搜索网络掩码[重复]
【发布时间】:2018-05-18 12:04:02
【问题描述】:

我在网上找到了一些匹配 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.0255.255.255.255 之间,并且总是有4 个元素,用点分隔。

【问题讨论】:

  • 这些库对于验证 IP 地址很有用,但我不知道如何使用它们来验证网络掩码。此外,如果两个正则表达式匹配,我仍然不明白为什么我的代码不起作用

标签: python regex ip-address netmask


【解决方案1】:

将您的正则表达式更改为: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),因为它被多次使用。

【讨论】:

  • 我的问题不在第一个循环中,而是在第二个循环中。第二个循环有一些问题。我在 [www.regexr.com](www.regexr.com) 网站上测试了正则表达式,它工作正常,所以它应该在脚本中正常工作。你能测试我的代码吗?
  • 我测试过,对我来说效果很好。原始形式的第一个循环仅在地址的前三组小于 200 时才有效。在第二个中,最后的 |0? 意味着第四组可以为空,我不确定那是你想要的. [01]?[0-9][0-9]? 已经涵盖了任何组中的单个 0
  • 我应用了您建议的更改并且效果很好。我什至没有意识到 IP 地址的限制。这里最奇怪的部分是网络掩码循环在一段时间后再次开始工作,甚至在任何更改之前。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
相关资源
最近更新 更多