質問

ウェブページ内の数字を無限に一致させる必要があります。

次のすべての形式に一致させる必要があります:

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 には解決策がありますが、この解決策はありません。

プレーンテキストの検索/置換なので、正規表現を使用する以外の方法は考えられません。

役に立ちましたか?

解決

これは、指定したすべての数値形式に一致する正規表現です。

^(?:\$\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 * \ $)?$ は、任意の量のスペースが前にある、文字列の末尾のオプションの$と一致します。

他のヒント

なぜ複数の正規表現を書くことができ、それらを順番に適用するのか?

1行ずつ繰り返し処理できると想定しています(?)。カンマに精通した正規表現を試してみて、その後にスペースに精通した正規表現などを試してみてください。一致するものがある場合は、残りを試行せずに、結果を保存して次の行に進みます。

2つのステップでこれを行うことについてはどうですか:

最初にすべてのスペースを ''

に置き換えます

その後、数値の書式設定が常に同じ場合、コンマを ''

に置き換えることができます

その後、非常に簡単になりましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top