1

在 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 条件字符串格式。我需要三元在字符​​串中,而不是在字符串的格式化元组/字典中。

4

1 回答 1

1

如果我理解正确,您可以使用类似http://docs.python.org/library/functools.html#functools.partial

return m.sub(partial(process_pseudo_ternary, custom_1=True, custom_2=True), ts)

编辑:稍作更改,以更好地匹配您的代码。

于 2012-10-07T18:50:03.070 回答