[英]Python regular expression to match IPV4 address doesn't work
我正在使用re
庫。
def validate_ip(self, ip):
pattern = re.compile(r'([01]?[0-9]?[0-9]|2[0-4][0-9]|2[5][0-5])\.{4}')
matchObj = re.match(pattern, ip)
if matchObj == None:
print "Invalid IP:", ip
sys.exit(0)
當我通過IP 192.0.0.0時 ,輸出是:
Invalid IP: 192.0.0.0
為什么不匹配?
您的模式匹配一個3位數字,后跟恰好4個點:
>>> pattern = re.compile(r'([01]?[0-9]?[0-9]|2[0-4][0-9]|2[5][0-5])\.{4}')
>>> pattern.match('255....')
<_sre.SRE_Match object at 0x1026eda80>
{4}
不適用於它之前的所有內容; 它僅適用於只是 \\.
。
你想要這個:
r'(([01]?[0-9]?[0-9]|2[0-4][0-9]|2[5][0-5])\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|2[5][0-5])'
這符合您的數字模式加上a .
點3次,因為現在{3}
適用於前面的分組表達式中的所有內容(使用(...)
)。 然后,您仍需要分別匹配最后一個數字組。
演示:
>>> pattern = re.compile(r'(([01]?[0-9]?[0-9]|2[0-4][0-9]|2[5][0-5])\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|2[5][0-5])')
>>> pattern.match('192.0.0.0')
<_sre.SRE_Match object at 0x1023bf588>
順便說一下, if not match:
使用if not match:
測試匹配失敗; None
在布爾上下文中是false值。 即使你真的想測試None
,你也應該使用if match is None:
,使用身份測試。
如果您可以使用Python 3.3+,請使用ipaddress
庫。
import ipaddress
for ip in ["192.0.0.0", "0.0.0.0", "192.168.0.256"]:
try:
ipaddress.ip_address(ip)
print("{} is valid".format(ip));
except ValueError:
print("{} is invalid".format(ip))
輸出:
192.0.0.0 is valid
0.0.0.0 is valid
192.168.0.256 is invalid
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.