-2

文字列を取得する形式がわからないため、さまざまな形式で価格を取得する正規表現に取り組んでいるため、できるだけ多くのバリエーションをカバーするようにしています。

これが私が思いついたものです

\$\s*?(\d+\.?\d*?)+|usd\s*?(\d+\.?\d*?)+|(\d+\.?\d*?)\s*?usd+|(\d+\.?\d*?)\s*?dollars?+|dollars?\s*?(\d+\.?\d*?)+|(\d+\.?\d*?)\s*?bucks?+|bucks?\s*?(\d+\.?\d*?)+

私はいくつかの例で上記を試しましたが、今のところ失敗していません。

誰もがそれを達成するためのより良い方法を考えることができますか?

4

2 に答える 2

1

ここでの本当の答えは、データの正規化によって達成されます。数字、ドット、および(負の値が予想される場合は)ハイフンを除くすべての文字を削除することから始めます。次に、数字として使用できる文字列が作成されます。利用可能なテストデータがある場合は、正規表現を作成する前に、まず正規化を試してください。コードを書くのが簡単になるだけでなく、実行も速くなります!

于 2012-12-22T18:29:04.637 に答える
0

バリエーションごとに別々の式を使用し、それらを順番に(ほとんどの場合は最初に)テストし、責任の連鎖パターンを適用することをお勧めします。

利点は保守性です。新しいバリエーションをサポートする必要がある場合(事前にすべての可能なカリエーションを知っているわけではないことを考慮すると)、現在構築したものの難解な複雑さをいじるのではなく、チェーンに別のメンバーを追加するだけです。

于 2012-12-22T18:31:46.517 に答える