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

时间:2019-08-28 14:46:39

标签: python regex object floating-point

我正在编写一些代码来从站点获取原始HTML,使用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_Match'

    print(new_value)

张照片: <_sre.SRE_Match对象; span =(77,85),match ='10191.53'>

我想使用来自对象的match ='10191.53'对其进行算术运算。我该如何从对象中挑选出这个值?

我已经阅读了正则表达式文档,并尝试了str()int()和float()函数的多种不同组合,以操纵对象的值最终成为float。

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

2 个答案:

答案 0 :(得分:2)

正如人们在评论中指出的那样,您需要使用提取捕获的组

new_value.groups()

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

TLDR ;

确保您的表达式捕获了所需的文本,然后使用方法groups从匹配项中提取文本。

答案 1 :(得分:2)

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

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

以字符串形式返回搜索结果,并将其转换为浮点数(docs)。 m.group(0)以字符串形式返回整个匹配项。另请参见this answer