¿Cómo escapar de la cadena Unicode para expresiones regulares?

Necesito crear un nuevo patrón basado en la cadena Unicode (por ejemplo, tengo “word”, y necesito algo como ^ “word” | “word”). Sin embargo, la “palabra” puede contener caracteres especiales. Para que coincida con la “palabra” tal como está, necesito escapar de caracteres especiales en la cadena Unicode. La función básica re.escape () hace el trabajo para cadenas ascii. ¿Cómo puedo hacer esto para unicode?

re.escape() inserta una barra invertida antes de cada carácter que no sea un alfanumérico ASCII. De hecho, esto puede llevar a una multitud de barras inversas innecesarias para insertar, sin embargo, Python ignora las barras diagonales inversas que no inician una secuencia de escape reconocida, por lo que no se hace ningún daño importante (excepto posiblemente alguna penalización de rendimiento).

Pero si desea construir un escape() más estricto escape() , puede:

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

que solo toca los metacaracteres reales de expresiones regulares. Espero no haberme perdido ninguna 🙂