Python 如何为正则表达式转义unicode字符串?

Python 如何为正则表达式转义unicode字符串?,python,regex,unicode,escaping,Python,Regex,Unicode,Escaping,我需要基于unicode字符串构建一个重新模式(例如,我有“word”,我需要类似于^“word”|“word”的东西)。但是,“单词”可以包含特殊的字符。为了匹配“word”,我需要对unicode字符串中的特殊re字符进行转义。基本的re.escape()函数用于处理ascii字符串。如何对unicode执行此操作?re.escape()在不是ASCII字母数字的每个字符之前插入反斜杠。事实上,这可能会导致插入大量不必要的反斜杠,但是,Python会忽略没有启动可识别转义序列的反斜杠,因此不

我需要基于unicode字符串构建一个重新模式(例如,我有“word”,我需要类似于^“word”|“word”的东西)。但是,“单词”可以包含特殊的字符。为了匹配“word”,我需要对unicode字符串中的特殊re字符进行转义。基本的re.escape()函数用于处理ascii字符串。如何对unicode执行此操作?

re.escape()
在不是ASCII字母数字的每个字符之前插入反斜杠。事实上,这可能会导致插入大量不必要的反斜杠,但是,Python会忽略没有启动可识别转义序列的反斜杠,因此不会造成太大的伤害(可能除了一些性能损失)

但是,如果您想构建更严格的
escape()
,您可以:

def escape(s):
    return re.sub(r"[(){}\[\].*?|^$\\+-]", r"\\\g<0>", s)
def逃逸:
返回re.sub(r“[(){}\[\].?|$\+-]”,r“\\\g”,s)

它只涉及实际的正则表达式元字符。我当然希望我没有错过任何:)

你能给出一个,而不是一个描述吗?
re.escape()
对Unicode字符串有效。你能举一个没有给出正确结果的例子吗?在python 2.7中,转义函数是这样实现的:`_alphanum=frozenset(“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzo123456789”)def escape(pattern):“转义pattern中的所有非字母数字字符。”s=list(pattern)alphanum=\u alphanum表示枚举(模式)中的i,c:如果c不在alphanum中:如果c=“\000”:s[i]=“\\000”否则:s[i]=“\\\”+c返回模式[:0]。join(s)`好的,我同意它插入了许多不必要的反斜杠。但是它们也不会损害正则表达式的正确性,是吗?谢谢,re.escape()真的很有效,我没有意识到这一点。我只是忘了“|”后面的括号。