我的情况是用户可以输入格式字符串,我想执行验证检查,拒绝包含无效参数的格式字符串。
例如,假设唯一有效的参数是{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}
。
答案 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