2012-02-06 14 views
13

私はPython 3で読み込み、結果の文字列に値をフォーマットしたいLaTeXファイルを持っています。ような何か:余分な中括弧を含む文字列をフォーマットします

... 
\textbf{REPLACE VALUE HERE} 
... 

しかし、文字列の書式設定を行うための新しい方法が{val}表記を使用していますので、私はこれを行う方法を見つけ出すことができていないと、それはLaTeXの文書であるため、余分な{}文字のトンがあります。

私が何かしようとしました:

'\textbf{This and that} plus \textbf{{val}}'.format(val='6') 

を私は、私が実際にやるだろう何である

KeyError: 'This and that' 

答えて

20

方法1、取得:代わりにstring.Templateを使用します。

>>> from string import Template 
>>> Template(r'\textbf{This and that} plus \textbf{$val}').substitute(val='6') 
'\\textbf{This and that} plus \\textbf{6}' 

方法2:中かっこを追加します。これは正規表現を使って行うことができます。

>>> r'\textbf{This and that} plus \textbf{val}'.format(val='6') 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
KeyError: 'This and that' 
>>> r'\textbf{{This and that}} plus \textbf{{{val}}}'.format(val='6') 
'\\textbf{This and that} plus \\textbf{6}' 

(可能な場合)方法3:カスタム文字列を使用します。フォーマッタ。私は自分自身でこれを行う理由はなかったので、私は助けになるほどの細部を知らない。

+0

将来、string.Templateは廃止されるかどうかの手掛かりはありますか?新しいpython 3 {}フォーマットにはこれが含まれているようです。 LaTeX編集では、テンプレートははるかに便利です。 – levesque

+0

@levesque:まあ、(保留中の)3.4では廃止されておらず、 '{}'の書式設定とは異なる機能を提供していますので、しばらく張り巡らされると思います。 – DSM

+0

正規表現を使うのではなく、余分な中括弧を追加する方が、おそらく 'str.translate'を使う方がいいでしょう。与えられた文字列を修正するために、 'goodstring = badstring.translate(unformatter)'(注意:この例では、 'unformatter = str.maketrans({'{'、 '}'}}}' Python 3.xについての質問です; 2.xでは、 'unicode'だけが1-n変換マッピングをサポートするので、これは' str'ではなく 'unicode'でのみ有効です。) – ShadowRanger