在 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
是空的。
关于如何通过这些的任何想法?m.sub(function, string)
不接受争论。
最后的字符串是:(some text val_if_true some text
因为字典有名为“pseudo_test”的键)。
随意将我重定向到字符串中三元运算符的不同实现。我知道Python 条件字符串格式。我需要三元在字符串中,而不是在字符串的格式化元组/字典中。