比较两个字符串并在Python中提取浮点值
我有一个函数比较两个字符串并在Python中提取浮点值,python,regex,Python,Regex,我有一个函数get_number,它比较两个字符串并提取两个整数值 input_regex = "what is (\d{1,50}) plus (\d{1,50})?" def get_number(input_regex, input): match = re.fullmatch(input_regex, input, re.IGNORECASE) if match: number_1 = f'{input[:match.start(0)]
get_number
,它比较两个字符串并提取两个整数值
input_regex = "what is (\d{1,50}) plus (\d{1,50})?"
def get_number(input_regex, input):
match = re.fullmatch(input_regex, input, re.IGNORECASE)
if match:
number_1 = f'{input[:match.start(0)]}{match[1]}'
number_2 = f'{input[:match.start(0)]}{match[2]}'
ans = int(number_1) + int(number_2)
return ans
例如:
输入:“5加1是多少?”
此函数将提取5和1,并将两者相加。
为此,我使用了“什么是(\d{1,50})加上(\d{1,50})?”
现在我想从字符串中提取浮点值。因此,我应该使用什么来代替\d
\f
或%f
无法处理此问题
从这里得到建议:改变
input_regex = "what is (\d{1,50}) plus (\d{1,50})?"
到
这将使用可选的“+”或“-”匹配整数和浮点值。您必须转义结尾的“?”字符才能与普通问号匹配
此外,要以浮点形式输出,您需要更改函数get_number()
以转换为浮点
def get_number(input_regex, input):
match = re.fullmatch(input_regex, input, re.IGNORECASE)
if match:
number_1 = f'{match[1]}'
number_2 = f'{match[2]}'
ans = float(number_1) + float(number_2)
return ans
无需在数字中包含输入[:match.start(0)]
。
例如:
输出:
6.0
-3.5
看起来你实际上要问的是如何处理正则表达式,而不是f字符串,甚至不是Python\d只匹配数字,而不是浮点数中的小数点。是,\d只匹配数字。我需要将浮点数与小数点匹配。这只是我的问题。
input_regex = "what is ([-+]?\d*\.?\d+) plus ([-+]?\d*\.?\d+)\?"
print(get_number(input_regex, "what is 5 plus 1?"))
print(get_number(input_regex, "what is -5.0 plus 1.5?"))
6.0
-3.5