Quiero utilizar la entrada de un usuario como un patrón de expresiones regulares para una búsqueda sobre algún texto. Funciona, pero ¿cómo puedo manejar los casos en los que el usuario pone caracteres que tienen significado en expresiones regulares? Por ejemplo, el usuario desea buscar Word (s)
: el motor regex tomará el (s)
como un grupo. Quiero que lo trate como una cadena "(s)"
. Puedo ejecutar replace
en la entrada del usuario y reemplazar el (
con \(
y el )
con , pero el problema es que tendré que reemplazar por cada posible símbolo de expresión regular. ¿Conoces alguna mejor manera?Escapar cadena de expresiones regulares en Python
Respuesta
utilizar la función re.escape()
para esto:
de escape (cadena)
cadena devuelta con todos los no-alfanuméricos barra invertida; esto es útil si desea hacer coincidir una cadena literal arbitraria que puede tener metacaracteres de expresiones regulares en ella.
Un ejemplo simplista, busque cualquier aparición de la cadena provista, seguida opcionalmente de 's', y devuelva el objeto de coincidencia.
def simplistic_plural(word, text):
word_or_plural = re.escape(word) + 's?'
return re.match(word_or_plural, text)
Puede utilizar re.escape():
re.escape (cadena) cadena devuelta con todos los no-alfanuméricos barra invertida; esto es útil si desea hacer coincidir una cadena literal arbitraria que puede tener metacaracteres de expresiones regulares en ella.
>>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'
Desafortunadamente, re.escape()
no es adecuado para la cadena de reemplazo:
>>> re.sub('a', re.escape('_'), 'aa')
'\\_\\_'
Una solución es poner la sustitución en un lambda:
>>> re.sub('a', lambda _: '_', 'aa')
'__'
debido a que el valor de retorno de el lambda es tratado por re.sub()
como una cadena literal.
Por favor, darle una oportunidad:
\ Q y \ E como anclas
Ponga una condición para que coincida con O sea una palabra completa o expresiones regulares.
Ref Enlace: How to match a whole word that includes special characters in regex
- 1. Escapar caracteres especiales en Java Expresiones regulares
- 2. Python comparando cadena contra varias expresiones regulares
- 3. UTF expresiones regulares en Python
- 4. Otra forma en lugar de escapar patrones de expresiones regulares?
- 5. Escapar punto en un rango de expresiones regulares
- 6. Limpiar expresiones regulares de Python
- 7. Expresiones regulares de Python O
- 8. Python Expresiones regulares para implementar unescaping de cadena
- 9. Python partido de expresiones regulares asterisco literal
- 10. Python expresiones regulares no codiciosos
- 11. Separar una cadena basado en expresiones regulares
- 12. Python expresiones regulares para extraer la fecha
- 13. Negación de cadena usando expresiones regulares
- 14. Empareje eficazmente múltiples expresiones regulares en Python
- 15. Perl como expresiones regulares en Python
- 16. Python expresiones regulares que no trabaja
- 17. puntuacion de cadena con expresiones regulares
- 18. C# de expresiones regulares excluyendo una cadena
- 19. Python 2.6+ str.format() y expresiones regulares
- 20. expresiones regulares (expresiones regulares), reemplace la segunda aparición en javascript
- 21. fechas de partidos usando Python expresiones regulares
- 22. Expresiones regulares de Python - re.search() vs re.findall()
- 23. expresiones regulares de python devuelven verdadero/falso
- 24. Expresiones regulares en findstr
- 25. Cómo analizar una cadena sin expresiones regulares
- 26. Rubí Separar una cadena con expresiones regulares
- 27. expresiones regulares: Buscar cadena sin subcadena
- 28. C# Expresiones regulares, cadena entre comillas simples
- 29. Expresiones regulares en Puntuación
- 30. Limitaciones de expresiones regulares?
El argumento '' repl' a re.sub' es una cadena, no una expresión regular; aplicar 're.escape' a esto no tiene ningún sentido en primer lugar. – tripleee