我需要根据unicode字符串构建一个re模式(例如我有" word",我需要类似^" word" |" word&#34 )。然而,"字"可以包含特殊的重新字符。匹配"字"实际上,我需要在unicode字符串中转义特殊的re字符。基本的re.escape()函数为ascii字符串完成工作。我怎样才能为unicode做这个?
答案 0 :(得分:6)
re.escape()
在每个不是ASCII字母数字的字符之前插入反斜杠。实际上这可能会导致插入大量不必要的反斜杠,但是,Python会忽略不会启动已识别的转义序列的反斜杠,因此不会造成太大的伤害(除了可能的性能损失)。
但是如果你想建立一个更严格的escape()
,你可以:
def escape(s):
return re.sub(r"[(){}\[\].*?|^$\\+-]", r"\\\g<0>", s)
仅触及实际的正则表达式元字符。我当然希望我没有错过任何一个:)