我正在使用一个API,直到最近才返回一个包含{{variable_name}}形式的变量的字典。然后我会使用翻译词典将这些变量翻译成我自己的字符串,这一行:
new_string = re.sub(r"\{\{(\w+)\}\}", lambda m: translator[m.group(1)], raw_string)
然而,API已发生变化,由于某些奇怪的原因,现在变量使用连字符而不是下划线,例如{{variable-name}}。
现在使用连字符我的正则表达式不匹配,并且在无休止地尝试修复它并查看其他让我失败的Stack Overflow问题后,我不确定我还能尝试什么。
长话短说,我试图匹配任何系列的单词字符(字母,数字和下划线)和连字符,用双花括号括起来。
答案 0 :(得分:1)
对于{{variable_name}}
格式的变量,您使用了\w
,这是[A-Za-z0-9_]
的缩写。
然而,API已发生变化,由于某些奇怪的原因,现在变量使用连字符而不是下划线,例如{{variable-name}}。
现在_
下划线不可能你应该使用字符类[A-Za-z0-9-]
。请注意,-
应该在字符类的末尾或开头,以避免它作为范围的解释。
如果在某些情况下仍有_
的可能性,请使用[\w-]
,其中\w
是如上所述的简写。
因此,你的正则表达式将是\{\{([\w-]+)\}\}