1

Webページ内の無数の数字を一致させる必要があります。

次のすべての形式に一致できる必要があります。

100 $
99$
$99
$ 8
$.99
$ .8
$ 99.8
.99$
.99 $
9.2 $
1.2$

そして、コンマを使用した同等のもの:

444,333
22,333
1,222
11,111,111
333,333,333,333.01132

またはスペース:

444 333
22 333
1 222
11 111 111
333 333 333 333.01132

これは私にとって本当に難しいものです。私は正規表現で遊ぶことに慣れていますが、完全に防弾を書くことができませんでした。通常、 http://www.regexlib.comに解決策がありますが、これには解決策がありません。

正規表現はプレーンテキストの検索/置換であるため、これ以外の方法は考えられません。

4

3 に答える 3

6

指定したすべての数値形式に一致する正規表現を次に示します。

^(?:\$\s*)?(?:(?:\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}|\d+)(?:\.\d*)?(?:\s*\$)?$

それを分解するには:

  • ^(?:\$\s*)?文字列の先頭でオプションの $ を探し、その後に任意の量のスペースが続きます
  • (?:(?:\d{0,3}(?:[, ]\d{0,3])*[, ])+\d{3}|\d*)は、カンマまたはスペースで区切られたグループに分割された\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}数値 ( )、または数値の文字列( ) のいずれか\d+と一致します。したがって、123,456,789、123 456 789、および 123456789 はすべて一致します。正規表現は、グループ化が不適切な数値を受け入れません (したがって、123,45,6789 は一致しません)。
  • (?:\.\d*)?オプションの小数とその後の任意の数の数値に一致します
  • (?:\s*\$)?$は、任意の量のスペースが先行する、文字列の末尾にあるオプションの $ と一致します。
于 2009-06-17T15:31:17.123 に答える
5

複数の正規表現を記述して順番に適用できるのに、なぜ 1 つの正規表現を記述するのでしょうか?

行ごとに反復処理できると仮定しています (?)。コンマに精通した正規表現に続いて、スペースに精通した正規表現などを試してみませんか? 1 つが一致する場合は、残りを試す必要はなく、結果を保存して次の行に進みます。

于 2009-06-17T15:16:15.840 に答える
0

2ステップでこれを行うのはどうですか:

最初にすべてのスペースを '' に置き換えます

次に、数値の形式が常に同じである場合は、カンマを '' に置き換えることができます

その後は、かなり簡単ですよね?

于 2009-06-17T15:17:05.293 に答える