Python float()参数必须是字符串或数字,而不是'_sre.sre#u Match';

Python float()参数必须是字符串或数字,而不是'_sre.sre#u Match';,python,regex,object,floating-point,Python,Regex,Object,Floating Point,我正在编写一些代码,从一个站点获取原始HTML,使用正则表达式确定某个可能随时间而改变的值,并将其与存储在文本文件中的值进行比较 除了将我的正则表达式对象转换成一个浮点数以允许与另一个浮点数进行比较外,其他一切都可以工作 def find_new_value():#从网站检索值 cmc\u html=请求。获取('https://websitewithvalue.com') noStarchSoup=bs4.BeautifulSoup(cmc_html.text, features=“html

我正在编写一些代码,从一个站点获取原始HTML,使用正则表达式确定某个可能随时间而改变的值,并将其与存储在文本文件中的值进行比较

除了将我的正则表达式对象转换成一个浮点数以允许与另一个浮点数进行比较外,其他一切都可以工作


def find_new_value():#从网站检索值
cmc\u html=请求。获取('https://websitewithvalue.com')
noStarchSoup=bs4.BeautifulSoup(cmc_html.text,
features=“html.parser”)
还汤
new_value=float(btc_regex2.search(str(find_new_value()))
导致- TypeError:float()参数必须是字符串或数字,而不是“\u sre.sre\u Match”

    print(new_value)
印刷品:

我想使用对象中的match='10191.53'对其执行算术运算。如何从对象中提取该值

我已经阅读了regex文档,并尝试了str()int()和float()函数的多种不同组合来操纵对象的值,使其最终成为float


我可以理解为什么float()不能用于此,但不能理解如何从对象获取10191.53值,以便在数学运算中使用它

正如人们在评论中指出的,您需要使用

new_value.groups()
此方法的输出取决于正则表达式的语法。为了使
工作,您需要在正则表达式中包含捕获组,否则
将始终为空,即使表达式与输入匹配

TLDR


确保表达式捕获了所需的文本,并使用方法
groups

从匹配中提取它。如果模式与要转换为浮点的字符串完全匹配,则可以调用

result = regex.search(value)
new_value_str = result.group(0)
new_value = float(new_value_str)

以字符串形式返回搜索结果并将其转换为浮点()。m、 组(0)以字符串形式返回整个匹配项。另请参见。

您需要提取我假设的组。如果您也包括导入内容,这会有所帮助。
search=btc_regex2.search(str(find_new_value());new_value=float(search.group(0))if search else 0
-理论上,对象可以是None(如果没有任何匹配项),因此您应该保存搜索结果并查看它是否为空。也提高了一点可读性。谢谢,QHarr!这回答了我的问题,得到了我想要的结果。非常感谢!