Python:单词和连字符的正则表达式

时间:2017-05-14 15:08:52

标签: regex python-2.7

我正在使用一个API,直到最近才返回一个包含{{variable_name}}形式的变量的字典。然后我会使用翻译词典将这些变量翻译成我自己的字符串,这一行:

new_string = re.sub(r"\{\{(\w+)\}\}", lambda m: translator[m.group(1)], raw_string)

然而,API已发生变化,由于某些奇怪的原因,现在变量使用连字符而不是下划线,例如{{variable-name}}。

现在使用连字符我的正则表达式不匹配,并且在无休止地尝试修复它并查看其他让我失败的Stack Overflow问题后,我不确定我还能尝试什么。

长话短说,我试图匹配任何系列的单词字符(字母,数字和下划线)和连字符,用双花括号括起来。

1 个答案:

答案 0 :(得分:1)

对于{{variable_name}}格式的变量,您使用了\w,这是[A-Za-z0-9_]的缩写。

  

然而,API已发生变化,由于某些奇怪的原因,现在变量使用连字符而不是下划线,例如{{variable-name}}。

现在_下划线不可能你应该使用字符类[A-Za-z0-9-] 。请注意,-应该在字符类的末尾或开头,以避免它作为范围的解释。

如果在某些情况下仍有_的可能性,请使用[\w-],其中\w是如上所述的简写。

因此,你的正则表达式将是\{\{([\w-]+)\}\}