为什么这个正则表达式不返回我的价格值?

时间:2019-04-15 15:53:07

标签: python

this is the tag im looking to find with the below regex '<span itemprop="price">34.97</span>'
matches = re.findall(r'<span itemprop="price">\$(\d+)</span>', html) 

以上仅显示了尝试,没有$

我希望在此示例中看到价格34.97,但是当我运行代码时,这是返回的值(不返回结果)

最高价:¥ 0 最低价格:$ 0 200 []

3 个答案:

答案 0 :(得分:0)

您正在尝试捕获34.97

\ d +不代表美元和美分之间的时间段。

尝试: (\ d +。\ d +)

\d+ (one or more digit)
\. (escaped . character so it captures one period)
\d+ (one or more digits)

https://pythex.org/

是你的朋友!

答案 1 :(得分:0)

使用此正则表达式demo

<span itemprop=\"price\">(\d*\.?\d+)</span>

它考虑小数和数字

如果您真的不在乎跨度是多少,这里是它的正则表达式demo2

<span itemprop=\"price\">([^<]+)</span>

根据re.findall的需要随意调整它,因为它将返回整个跨度,因此,如果您只想要数字而不是整个跨度,则可能需要在此正则表达式中进行正向和反向查找。但这取决于您。

答案 2 :(得分:0)

以上两个选项和建议均有效,但经过一些测试,我们发现在某些情况下标签中没有数字值,因此选择了最后一个建议     ([^ <] +)

这似乎可以立即捕获这些实例,并将在需要时进行调整。我们正在构建概念蜘蛛,因此将对我们的测试和演示功能起作用。