使用正则表达式拒绝包含无法识别的参数的格式字符串

时间:2016-02-01 16:39:43

标签: python regex

我的情况是用户可以输入格式字符串,我想执行验证检查,拒绝包含无效参数的格式字符串。

例如,假设唯一有效的参数是{one},{two}和{three},以下内容应无效,因为它包含{4},无法识别。

This is {one} an {four} example.

我花了很多时间试图想出一个可以完成这项工作的正则表达式,但没有运气。

我最好的尝试是

def is_valid(template):
    return re.search(r'\{(?!one|two|three).*\}', template) is None

但这匹配{onee}{twoawoinfwnfaf}

2 个答案:

答案 0 :(得分:2)

EAFP approach怎么样?尝试格式化字符串并处理KeyError

f = "This is {one} an {four} example."

try:
    s = f.format(one="one", two="two", three="three")
    print("Valid format string")
except KeyError:
    print("Invalid format string")

答案 1 :(得分:2)

您需要在前瞻断言中添加}

def is_valid(template):
    return re.search(r'\{(?!(?:one|two|three)\}).*\}', template) is None