5

3桁ごとにスペースを入れて表示するために、10進数で文字列を単純化する方法は?

私はこのようなものを作ることができます:

some_result = '12345678,46'
' '.join(re.findall('...?', test[:test.find(',')]))+test[test.find(','):]

結果は次のとおりです。

'123 456 78,46'

でも私はしたい:

'12 345 678,46'
4

3 に答える 3

15

これは少しハックですが、次のとおりです。

format(12345678.46, ',').replace(',', ' ').replace('.', ',')

Format specification mini-languageで説明されているように、format_spec で:

「,」オプションは、3 桁ごとの区切り記号としてカンマを使用することを示します。

次に、各カンマをスペースに置き換え、次に小数点をカンマに置き換えるだけで完了です。

str.formatの代わりに使用するより複雑なケースではformat、次のように format_spec がコロンの後に続きます。

'{:,}'.format(12345678.46)

詳細はPEP 378を参照してください。


n一方、システムのロケールに標準のグループ化とセパレーターを使用しようとしているだけの場合は、フォーマットの種類や関数などを使用する簡単な方法がありますlocale.format。たとえば、次のようになります。

>>> locale.setlocale(locale.LC_NUMERIC, 'pl_PL')
>>> format(12345678, 'n')
12 345 678
>>> locale.format('%.2f' 12345678.12, grouping=True)
12 345 678,46
>>> locale.setlocale(locale.LC_NUMERIC, 'fr_FR')
>>> locale.format('%.2f' 12345678.12, grouping=True)
12345678,46
>>> locale.setlocale(locale.LC_ALL, 'en_AU')
>>> locale.format('%.2f' 12345678.12, grouping=True)
12,345,678.46

たとえば、システム ロケールが の場合、pl_PL呼び出すlocale.setlocale(locale.LC_NUMERIC)(またはを呼び出すlocale.setlocale(locale.LC_ALL)) だけで必要なポーランド語の設定が取得されますが、オーストラリアでプログラムを実行している同じ人が、必要なオーストラリアの設定を取得します。

于 2013-07-05T08:42:00.010 に答える
1

使用する:

' '.join(re.findall('...?',test[:test.find(',')][::-1]))[::-1]+test[test.find(','):]

最初から文字列の照合を開始する正規表現を使用しました。しかし、最後(カンマの前)から 3 つの数字をグループ化する必要があります。

したがって、コンマの前の文字列を逆にし、同じロジックを適用してから逆に戻します。

于 2013-07-05T09:13:49.127 に答える