3桁ごとにスペースを入れて表示するために、10進数で文字列を単純化する方法は?
私はこのようなものを作ることができます:
some_result = '12345678,46'
' '.join(re.findall('...?', test[:test.find(',')]))+test[test.find(','):]
結果は次のとおりです。
'123 456 78,46'
でも私はしたい:
'12 345 678,46'
3桁ごとにスペースを入れて表示するために、10進数で文字列を単純化する方法は?
私はこのようなものを作ることができます:
some_result = '12345678,46'
' '.join(re.findall('...?', test[:test.find(',')]))+test[test.find(','):]
結果は次のとおりです。
'123 456 78,46'
でも私はしたい:
'12 345 678,46'
これは少しハックですが、次のとおりです。
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)
) だけで必要なポーランド語の設定が取得されますが、オーストラリアでプログラムを実行している同じ人が、必要なオーストラリアの設定を取得します。
使用する:
' '.join(re.findall('...?',test[:test.find(',')][::-1]))[::-1]+test[test.find(','):]
最初から文字列の照合を開始する正規表現を使用しました。しかし、最後(カンマの前)から 3 つの数字をグループ化する必要があります。
したがって、コンマの前の文字列を逆にし、同じロジックを適用してから逆に戻します。