Python 正则表达式搜索网络掩码
Python Regex search for Network Mask
我在网上找到了一些匹配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
这样的有效掩码。因此,它总是在第二个问题上循环。
这里有什么问题?我不应该使用 "search" 选项吗?
总而言之: 我需要验证用户提供的网络掩码。它可以在 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
),因为它被多次使用。
我在网上找到了一些匹配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
这样的有效掩码。因此,它总是在第二个问题上循环。
这里有什么问题?我不应该使用 "search" 选项吗?
总而言之: 我需要验证用户提供的网络掩码。它可以在 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
),因为它被多次使用。