CsQuery:在页面上查找价格

时间:2015-02-22 19:08:16

标签: html regex csquery

我正试图从任何给定的URL中提取价格。我正在使用CsQuery,对于我的生活,我无法弄清楚找到页面上可能是一个价格的所有项目的最佳方法。奖金将根据测试的大小/颜色以及与页面顶部的接近程度来确定最可能的价格。我想也许正在寻找一个Regex解决方案,但我不确定这是否是使用CsQuery的正确方法。

1 个答案:

答案 0 :(得分:1)

好吧,如果存在货币符号,您可以执行类似的操作。

(?:\$|\£)(\d+(?!\d*,\d)|\d{1,3}((, ?)\d{3}?)?(\3\d{3}?){0,4})(\.\d{1,2})?(?=[^\d,]|, (?!\d{3,})|$)

(?:\$|\£)      -- matches literal currency simbols. You can remove this
                  if you can't count on the presence of currency symbols,
                  but it's a great anchor if you can
(\d+           -- matches any number of digits
  (?!\d*,\d)      as long as not followed by comma digit
|
  \d{1,3}      -- otherwise matches betweein 1 and 3 digits
  (
    (, ?)      -- looks for a comma followed by a possible space
                  captures as \3
    \d{3}?)    -- followed by 3 digits
    ?          -- zero or one times
  (\3        -- looks for the same pattern of comma with or without space
    \d{3}?   -- followed by 3 digits
  ){0,4})    -- between 0 and 4 times, more on that below
(\.          -- literal period
  \d{1,2}      -- followed by one or two digits
)?           -- zero or one times (so, optional)
(?=[^\d,]|, (?!\d{3,})|$)

你可能做的另一件事是限制逗号组的重复次数,这可能有助于清除不太可能出现价格的高数字。如果你没有期待任何超过999,999的东西,你可能会这样做(但如果你处理的是外币,通货膨胀已经取得了一些天文数字 - 津巴布韦的一条面包需要花费五千万美元。)

为方便阅读,我将向您展示如何将重复限制为7

将4(整个正则表达式中只有4个)更改为6,(您想要的数字为-1,因为我们预先查找1以建立逗号模式)。

(?:\$|\£)(\d+(?!\d*,\d)|\d{1,3}((, ?)\d{3}?)?(\3\d{3}?){0,6})(\.\d{1,2})?(?=[^\d,]|, (?!\d{3,})|$)

您可以在以下位置查看此操作:https://regex101.com/r/oU2nW2/1