![如何使用正则表达式用 0 替换单个浮点](https://linux22.com/image/194821/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%94%A8%200%20%E6%9B%BF%E6%8D%A2%E5%8D%95%E4%B8%AA%E6%B5%AE%E7%82%B9.png)
我正在编写 python 脚本,在代码的某个点上,我要求用户输入一些整数或浮点数,我使用正则表达式来验证他是否输入了正确的值
这是我的脚本的输入部分:
import re
ask = input('Please enter some number or float: ')
match = re.match('\d+\.\d+|\d+', ask)
if match:
print(match.group())
else:
print('[!] Invalid value !')
现在,如果用户输入 float ,则22.
匹配将是22
,但我希望它是22.0
如果他进入,.22
那么比赛将会是None
,但我希望它是0.22
我如何使用正则表达式来做到这一点?
答案1
要匹配逗号之前或之后可能没有数字的数字,您需要一个正则表达式,例如\d+(\.\d*)?|\.\d+
.
基本上,有四种不同的情况:
123
123.456
123.
.456
您不能将整数部分和小数部分都设置为可选,因为点也是可选的,而且无论如何,单独的点可能不应该被接受。
我们至少需要两种选择。\d+(\.\d*)?
匹配带有整数部分的数字,后面可选地跟一个点和小数部分中的零个或多个数字,所以是前三种情况。第二部分与最后一个情况匹配,以点开头,后面有一些数字。
它仍然按原样返回.22
,22.
但您可以轻松添加检查以查看该点是第一个还是最后一个字符,并添加缺少的零。例如re.sub()
:
#!/usr/bin/python3
import re, sys
m = re.match("^(\d+(\.\d*)?|\.\d+)$", sys.argv[1])
if not m:
print("no match")
exit(1)
s = m.group()
print(s)
s = re.sub("^\.", "0.", s);
s = re.sub("\.$", ".0", s);
print(s)