4

正規表現を使用して、文字列内の適切にフォーマットされた通貨または数値の範囲を見つけようとしています。私はたまたまC#を使用しているので、正規表現はそのようにフォーマットされています。

たとえば、次のものを見つけられるようにしたい:

$10,000,000 to $20M
$10k-$20k
100.23k - 200.34k
$20000 and $500600
3456646 to 4230405

それは一致するべきではありません:

$10,0000,000 to $20,000,000 //extra zero in first number
20k xyz 40k //middle string does not match a range word

これまでの私の正規表現は次のとおりです。

(^|\s|\$)([1-9](?:\d*|(?:\d{0,2})(?:,\d{3})*)(?:\.\d*[1-9])?|0?\.\d*[1-9]|0)(|m|k)(?:|\s)(?:|to|and|-|,)(?:|\s)(|\$)([1-9](?:\d*|(?:\d{0,2})(?:,\d{3})*)(?:\.\d*[1-9])?|0?\.\d*[1-9]|0)(\s|m|k)

かなりうまく機能しているようですが、予期しないアイテムと一致することがあります。例:

1985 xyz 1999 //2 matches, both numbers without xyz
$10,000,000 xyz $20000000 //1 match on the $2000000
$10,000,0000 to $20,000,000 //1 match on the $10,000,0000 (extra zero on end)

私は何が欠けていますか?これを正規表現で行うのはばかげていますか?

4

1 に答える 1