我是Python新手。我正在网上做CS50P。
问题要求我们验证 IPv4 格式的 IP 地址。
我的代码是:
def main():
ip = input("IPv4 Address: ")
if validate(ip):
print(validate(ip))
else:
print(validate(ip))
def validate(ip):
pattern = r"^(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-5][0-5]?)\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-5][0-5]?)\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-5][0-5]?)\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-5][0-5]?)$"
match = re.search(pattern, ip)
if match:
return True
else:
return False
if __name__ == "__main__":
main()`
我的问题是:我不明白为什么 140.247.235.144 会返回 False?
我后来修改为
def main():
ip = input("IPv4 Address: ")
if validate(ip):
print(validate(ip))
else:
print(validate(ip))
def validate(ip):
pattern = r"^(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5])$"
match = re.search(pattern, ip)
if match:
return True
else:
return False
if __name__ == "__main__":
main()
现在效果很好。有人可以解释一下吗?另外,如何通过仅允许 REGEX 的约束来收紧它?
谢谢!
它不接受范围246-249,因为2[0-5][0-5]?这个表达式不允许。从[0-5]开始?条件不满足大于5的值,140.247.235.144不接受这里的表达式247。
您可以按如下方式防止重复第二个陈述。由于前三部分是重复的,因此您可以将它们分组。
^((0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5]) .){3}(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5 ])$