float() 参数必须是一个字符串或数字,而不是 '_sre.SRE_Match'

2024-05-14 10:14:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一些代码,从一个站点获取原始HTML,使用regex精确定位某个可能随时间变化的值,并将其与存储在文本文件中的值进行比较。你知道吗

除了将我的regex对象转换成一个浮点数以允许与另一个浮点数进行比较之外,所有的工作都正常。你知道吗


    def find_new_value(): # retrieves value from website
        cmc_html = requests.get('https://websitewithvalue.com')
        noStarchSoup = bs4.BeautifulSoup(cmc_html.text, 
        features="html.parser")
        return noStarchSoup   

   new_value = float(btc_regex2.search(str(find_new_value())))

导致- TypeError:float()参数必须是字符串或数字,而不是'_sre.sre\u匹配'

    print(new_value)

印刷品: <_sre.sre\u匹配object;span=(77,85),match='10191.53'>

我想使用对象中的match='10191.53'来执行算术运算。如何从对象中提取该值?你知道吗

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

我能理解为什么float()不能用在这个上,但不能理解如何从对象中获取10191.53的值,以便在数学运算中使用它。你知道吗


Tags: 对象代码new站点valuehtmlmatchfind
2条回答

如果模式与要转换为float的字符串完全匹配,则可以调用

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

以字符串形式返回搜索结果并将其转换为浮点(docs)。m、 组(0)以字符串形式返回整个匹配项。另见this answer。你知道吗

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

new_value.groups()

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

TLDR

确保表达式捕获了所需的文本,并使用方法groups从匹配中提取它。你知道吗

相关问题 更多 >

    热门问题