He estado jugando con los módulos de python re .search método. cur es la entrada de un widget de entrada Tkinter. Cada vez que ingreso una "\" en el widget de entrada, arroja este error. No estoy seguro de cuál es el error o cómo lidiar con él. Cualquier idea sería muy apreciada.Python re "error de escape falso"
cur es una cadena
TUP [0] es también una cadena
Fragmento:
se = re.search(cur, tup[0], flags=re.IGNORECASE)
El error:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python26\Lib\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Python26\Suite\quidgets7.py", line 2874, in quick_links_results
self.quick_links_results_s()
File "C:\Python26\Suite\quidgets7.py", line 2893, in quick_links_results_s
se = re.search(cur, tup[0], flags=re.IGNORECASE)
File "C:\Python26\Lib\re.py", line 142, in search
return _compile(pattern, flags).search(string)
File "C:\Python26\Lib\re.py", line 245, in _compile
raise error, v # invalid expression
error: bogus escape (end of line)
¿Es posible tratar a \ como un personaje ordinario? Similar al método r "cadena". – rectangletangle
@ Anteater7171: la barra diagonal inversa es especial para las expresiones regulares. Tiene dos opciones: no usar expresiones regulares o modificar la cadena para eliminar el significado especial. Para este último, agregar una barra invertida adicional es el truco (es decir: el patrón '\\' significa una barra invertida literal). –
+1 Deberías haber agregado tu último comentario a la respuesta. Para ampliar el comentario, en el contexto de, por ejemplo, re.search que significaría hacer '' pattern = "foobar \\\\" '', es decir, necesitas 4 barras diagonales inversas para que el argumento de patrón para re.search termine teniendo dos, lo que haría una expresión regular legal. – ThomasH