1

このトピックはある程度カバーされていることは知っていますが、数日経った今でも、テキスト ブロックから価格を解析する最善の方法を見つけるのに苦労しています。

以下にいくつかの例を示します: この車は 15,000 ドルで、アップグレード費用は 200 ドルです これらのベルトは 500.00 ドルで、送料は 50 ドルでお願いしています

私のアプローチは、3 つの別々の Regex マッチを行うことでした。

  1. K で省略されている価格を検索するには
  2. プレフィックス付きの価格を検索するには
  3. 接尾辞付きの価格を検索するには

千が省略されたドルを探します

preg_match_all('/^[0-9,]+(\.[0-9]{2})?(k)+$/', 
                    strtolower($description), $price_array1);

プレフィックス付きのドルを探します

preg_match_all('/^(\$|\$ |price|price |price is |price:|price: |us|us |usd|usd |asking|asking |wanting|wanting |want|want |sgd|euro|euro |£|£ |€|€ |gbp|gbp |cdn|cdn |)+[0-9,]+(\.[0-9]{2})?$/', strtolower($description), $price_array2);

接尾辞付きのドルを探す

preg_match_all('/(\$[0-9,]+(\.[0-9]{2})?)( eur|eur| firm| obo| shipped| \$|\$| €|€| £|£| gbp|gbp| dollar| aud)+/', strtolower($description), $price_array3);

しかし、実際にはこれらのどれも機能していないようです。正規表現が正しいと思いますか? しかし、なぜそれらが何にも一致しないのかはわかりません。^ と $ を使用する必要があるかどうかについて少し混乱していることは認めますが、使用する場合と使用しない場合で試してみましたが、違いはないようです。どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

2

これは、お金のような数字を厳密に一致させるための私の解決策です(千の場合でも、接頭辞や接尾辞は認識されません):

/(?<![0-9.,])(?:[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9]*)?)(?![0-9.,])/

、、、、、、、、34563745,34534を受け入れます。283947982.234_ 283.432_ 234424._ 4234,4324_ しかし、それは、、、を拒否します。2.234.434,234423,234,234.234324849000.453985..,.,.434.,.34234,43.23423467,4443.234

以下は、単純な数字は別として、大文字と小文字を区別しないプレフィックスと k (1000 を表す) に一致します。

/(?<= |^)(?:(?i)(?:\$|USD) *)?(?:[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9]*)?)(?:(?i)k)?(?![0-9.,])/

さらにプレフィックスを追加する場合は、正規表現のこの部分を変更できます。

(?:\$|USD)

先頭または末尾にスペースを入れずに、プレフィックスを追加するだけです。スペースがたくさんある場合でも、正規表現は一致しようとします。

以下は、サフィックス付きの数字のみに一致します(オプションの千のインジケータを使用):

/(?<= |^)(?:[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]*)?|[0-9]{1,3}(?:\.?[0-9]{3})*(?:,[0-9]*)?)(?:(?i)(?:k )? *(?:\$|USD))(?= |$)/

さらにサフィックスを追加する場合は、上記と同じです。

入力をテストして試してみましょう:

Here's are some examples: This car is $15k and has $200 in upgrades Those belts are USD 500.00 and I'm asking 50 for shipping 345,345.45 495.344,424 ..,5435 878,543.455.345 345345435.545 234728394,34345 345, 453. 0.4355 .453 sdfsd usd 23423423K

于 2012-06-03T18:26:53.263 に答える