我在网上找到了一些匹配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个由点分隔的元素。
答案 0 :(得分:0)
将正则表达式更改为: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
),因为它已被多次使用。