2013-07-05 24 views
5

3桁の数字の間にスペースを入れて表示するには、10進数の単純な書式設定文字列にはどのようにしますか?フォーマット文字列 - 3桁の間のスペース

私はこのようなものにすることができます。

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

を、結果は次のとおりです。

'123 456 78,46' 

が、私がしたい:

'12 345 678,46' 
+0

何12345678,46123'' ' 'は? –

+0

@AshwiniChaudhary:通常、小数点の後には何千もの区切り文字を入れません。少なくともPEP 378のフォーマットは行われませんし、LC_NUMERICもどちらも検索できません。 – abarnert

+1

先頭から 'end'から空白を作るようにしてください。 – Zaffy

答えて

14

これは少しハックですが、:

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

format_specに、Format specification mini-languageに記載されているように:

「」オプションは、1000の区切りコンマの使用を知らせます。

次に、各カンマをスペースで置き換え、小数点をカンマで置き換えます。これで完了です。

代わりformatstr.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 

は、ちょうどあなたがしたい、ポーランドの設定をピックアップしますlocale.setlocale(locale.LC_NUMERIC)(またはlocale.setlocale(locale.LC_ALL))を呼び出し、pl_PL、言うが、オーストラリアでは、あなたのプログラムを実行している同じ人がオーストラリアの設定をピックアップしますその彼は欲しい。

1

用途:

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

あなたは開始から文字列にマッチする正規表現を開始するを使用していました。しかし、エンド(コンマの前)の3つの数字をグループ化したいとします。

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

5

私は正規表現が非常に良くなると思い:

>>> import re 
>>> some_result = '12345678,46' 
>>> re.sub(r"\B(?=(?:\d{3})+,)", " ", some_result) 
'12 345 678,46' 

説明:

\B  # Assert that we're not at the start of a number 
(?=  # Assert that the following regex could match from here: 
(?:  # The following non-capturing group 
    \d{3} # which contains three digits 
)+  # and can be matched one or more times 
,  # until a comma follows. 
)  # End of lookahead assertion 
+0

+1正規表現の内訳を提供しています! – Christoph