1

特定の URL から価格を取得しようとしています。私は CsQuery を使用していますが、私の人生では、価格である可能性のあるページ上のすべてのアイテムを見つけるための最良の方法を見つけることができません。ボーナスは、テストのサイズ/色と、ページの上部にどれだけ近いかによって、最も可能性の高い価格を把握することです. 正規表現のソリューションを見ているのではないかと考えていましたが、それが CsQuery を使用する正しい方法であるかどうかはわかりません。

4

1 に答える 1

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,})|$)

もう 1 つの方法は、コンマ グループの繰り返しの数を制限することです。これは、価格ではない大きな数を除外するのに役立つ場合があります。999,999 以上を期待していない場合は、これを行うこともできます (ただし、外国通貨を扱っている場合は、インフレによって天文学的に高い水準になっています。ジンバブエのパンは 5,000 万ドルします)。

読みやすいように、繰り返しを 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で実際に確認できます。

于 2015-02-22T21:59:22.313 に答える