使用 nokogiri n Ruby on Rails 分别获取折扣前和折扣后的价格

发布于 2024-12-10 07:46:46 字数 333 浏览 0 评论 0原文

我正在尝试学习废品这些值,我将其放入两个不同的任务中:

  1. 从整个文本中获取 35.00
  2. 从整个文本中获取 42.00

下面是 html:

<p style="font-size: 30px; margin-left: -10px; padding: 15px 0pt;">
$35.00 - $42.00
</p>

我用来获取整个文本的代码如下以下:

node = html_doc.at_css('p')  
p node.text

I'm trying to learn on scrap these values which i put it in 2 different task:

  1. get the 35.00 from the entire text
  2. get the 42.00 from the entire text

below is the html:

<p style="font-size: 30px; margin-left: -10px; padding: 15px 0pt;">
$35.00 - $42.00
</p>

the code that im using to get the entire text is as below:

node = html_doc.at_css('p')  
p node.text

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘虞初梦 2024-12-17 07:46:46

您可以从 node.text 获取整个文本,这就是 Nokogiri 所需要的。从那里你可以使用 scan 查找数字和一些列表争论 (flatten地图)而你'重新完成。像这样的:

first, second = node.text.scan(/(\d+(?:\.\d+))/).flatten.map(&:to_f)

这应该让您在 first 中得到 35.0,在 second 中得到 42.0。如果您知道数字是带小数的价格,那么您可以稍微简化正则表达式:

first, second = node.text.scan(/(\d+\.\d+)/).flatten.map(&:to_f)

You can get the whole text from node.text and that's as far as you need to go with Nokogiri. From there you could use scan to find the numbers and a bit of list wrangling (flatten and map) and you're done. Something like this:

first, second = node.text.scan(/(\d+(?:\.\d+))/).flatten.map(&:to_f)

That should leave you with 35.0 in first and 42.0 in second. If you know that the numbers are prices with decimals then you can simplify the regex a bit:

first, second = node.text.scan(/(\d+\.\d+)/).flatten.map(&:to_f)
只有一腔孤勇 2024-12-17 07:46:46

mu的答案是正确的,但使用 split/splat 似乎更简单。

first, second = *node.text.tr('
, '').split(' - ')

mu's answer is correct but it seems simpler to use split/splat.

first, second = *node.text.tr('
, '').split(' - ')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文