我正在尝试用 python 编写脚本,我需要验证用户输入的格式是否正确,例如 000.000 或 00.0 或 IP 前 2 段的任何其他组合(0 可以是任何数字).
我试过使用元字符“|”和 re 模块中的特殊序列“\d”来进行所有可能的组合,但现在即使我输入类似 14576.2345 的内容,它也被标记为正确的用户输入。
import re
ip_class = input("Enter ip class: ")
def ip_range(ip_start):
pattern= r"(\d+\d+\d+.+\d+\d+\d|\d+\d+.+\d+\d|\d+.+\d|\d+\d+\d+.+\d+\d|\d+\d+\d+.+\d|\d+\d+.+\d+\d+\d|\d+.+\d+\d+\d|\d+\d+.+\d|\d+.+\d+\d)"
match = re.match(pattern, ip_start)
if match:
print ("it works")
else:
print ("it doesnt work")
ip_range(ip_class)
我希望如果我输入的东西不能是 234534.1345 之类的 ip 的前 2 段,它会说“它不起作用”但它会说“它有效”它说即使没有句点,它也适用于至少 3 位数长的每个数字。
import socket
somestr = '123.0xe0f'
try:
addr = socket.inet_aton(somestr)
except OSError as e:
raise # String was not an inet address
在这种情况下,检查失败比猜测要容易得多。有效格式可能比您预期的要多得多。此外,.
是正则表达式中的通配符。
如果您特别需要四点符号,您也可以使用 socket.inet_pton(socket.AF_INET, somestr)
。这也可以表示为过于复杂的正则表达式。
编辑:我草率的阅读以某种方式跳过了“前两段”。我想这样做的一种方法是为此检查附加 ".0.0"
,尽管这仍然允许一个或两个段。
正则表达式不是绑定(bind)检查数字的理想选择。例如,从 0 到 255 的非零前缀十进制数可能是 \d|[1-9]\d|1\d\d|2[0-4]\d|25[0- 5]
。现在考虑一下,对于代码的下一位读者来说,不仅包含至少两个这样的组的正则表达式要检查什么,而且它正确地完成了检查,这将是多么清楚。
我是一名优秀的程序员,十分优秀!