Pythonでは、テンプレート文字列内に疑似三項演算子を実装しようとしています。kwargs
特定のキーがある場合、値が文字列に挿入されます。
re
モジュールには、私が必要としていることを正確に実行する方法がありre.sub()
ます。一致時に呼び出される関数を渡すことができます。私ができないことはそれに渡す**kwargs
ことです。コードは次のとおりです
import re
template_string = "some text (pseudo_test?val_if_true:val_if_false) some text"
def process_pseudo_ternary(match, **kwargs):
if match.groups()[0] in kwargs:
return match.groups()[1]
else:
return match.groups()[2]
def process_template(ts, **kwargs):
m = re.compile('\((.*)\?(.*):(.*)\)')
return m.sub(process_pseudo_ternary, ts)
print process_template(template_string, **{'pseudo_test':'yes-whatever', 'other_value':42})
if match.groups()[0] in kwargs:
もちろん、process_pseudo_ternarykwargs
は空なので、 lineが問題になります。
これらを渡す方法についてのアイデアはありますか?m.sub(function, string)
引数を取りません。
最終的な文字列は次のようになりますsome text val_if_true some text
(辞書には「pseudo_test」という名前のキーがあるため)。
文字列内の三項演算子の別の実装に自由にリダイレクトしてください。Pythonの条件付き文字列フォーマットを知っています。文字列のフォーマットタプル/辞書ではなく、文字列にターナリを含める必要があります。