如何使用正则表达式用 0 替换单个浮点

如何使用正则表达式用 0 替换单个浮点

我正在编写 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*)?匹配带有整数部分的数字,后面可选地跟一个点和小数部分中的零个或多个数字,所以是前三种情况。第二部分与最后一个情况匹配,以点开头,后面有一些数字。

它仍然按原样返回.2222.但您可以轻松添加检查以查看该点是第一个还是最后一个字符,并添加缺少的零。例如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)

相关内容