3

これらの場合の正規表現は何ですか:

29000.12345678900、期待される結果29000.123456789

29000.000、期待される結果29000

29000.00003400、期待される結果29000.000034

つまり、10 進数の後ろに 1 ~ 9 がない場合は 0 の点を削除し、実際に整数と見なせる場合はドット (.) も削除したいと考えています。

私はこの正規表現を使用します

(?:.0*$|0*$)

しかし、それは私にこの結果を与えます:

29123.6から29123.6400、そこから 4 がなくなりました。

正規表現を個別にテストしたところ、完全に機能し、

.0*$29123.0000から29123が返ってきます

0*$29123.642300から29123.6423が得られます

組み合わせた正規表現で何か不足していますか?

4

4 に答える 4

3

この正規表現を使用できます

^\d+(\.\d*[1-9])?
-   -------------
|        |->this would match only if the digits after . end with [1-9] 
|
|->^ depicts the start of the string..it is necessary to match the pattern

それはあなたの問題を解決します

ここで試してみてください

于 2013-01-06T10:01:55.257 に答える
3

正規表現が最善の方法だと思う場合は、次のようなものを使用できます。

\.?0+$

どちらの場合にも機能します。

> '12300000.000001130000000'.replace(/\.?0+$/g, '')
"12300000.00000113"
> '12300000.000000000000'.replace(/\.?0+$/g, '')
"12300000"
于 2013-01-06T09:56:15.160 に答える
0

Objective-C が次の構成のようなものをサポートしているかどうかはわかりませんが、Python では、正規表現を使用せずに完全に実行できますstr.rstrip()

In [1]: def shorten_number(number):
   ...:     return number.rstrip('0').rstrip('.')

In [2]: shorten_number('29000.12345678900')
Out[2]: '29000.123456789'

In [3]: shorten_number('29000.000')
Out[3]: '29000' 
于 2013-01-06T10:56:36.307 に答える
0

あなたは単にこれが欲しい:

^\d*(\.?\d*[1-9])?
  1. ^\d*これは、最初のグループの前に 1 つ以上の数字があることを意味します。
  2. ()一致するグループについて説明します。
  3. \.?単一の DOT(.)が存在する可能性がありますが、オプションであることを意味します。eg. (.)
  4. \d*1 つまたは複数の数字を指定できます。eg. (1234)
  5. \.?\d*1 つの DOT と 1 つ以上の数字が存在する可能性がありますeg. (.123)
  6. [1-9]これには、 を除く 1 から 9 までの数字のみが含まれ0ます。eg. (2344)

正規表現

于 2013-01-06T10:11:45.923 に答える