Acabo de preguntar esto question sobre el uso de una expresión regular para permitir números entre -90.0 y +90.0. Obtuve algunas respuestas sobre cómo implementar la expresión regular, pero la mayoría de las respuestas también mencionaban que eso sería mejor manejado sin usar una expresión regular o el uso de una expresión regular sería excesivo. Entonces, ¿cómo decides cuándo usar una expresión regular y cuándo no usar una expresión regular? ¿Hay una lista de verificación que puede seguir?Para usar o no usar expresiones regulares?
Respuesta
Las expresiones regulares son procesando texto herramienta para pruebas basadas en caracteres. Más formalmente, las expresiones regulares son buenas en el manejo de idiomas regulares y malas en casi cualquier otra cosa.
En la práctica, esto significa que las expresiones regulares no son muy adecuados para tareas que requieren el descubrimiento de significado (semántica ) en el texto que va más allá del nivel de personaje. Esto requeriría un analizador completo.
En su caso particular: reconocer un número en un texto es un ejercicio que las expresiones regulares son bueno at (los números decimales pueden describirse trivialmente usando un lenguaje normal). Esto funciona en el nivel de personaje.
Pero hacer cosas más avanzadas con el número que requiere conocimiento de su valor numérico (es decir, su semántica) requiere interpretación. Las expresiones regulares son malas en esto. Entonces, encontrar un número en el texto es fácil. Encontrar un número en el texto que sea mayor que 11 pero menor que 1004 (o que sea divisible por 3) es difícil: requiere el reconocimiento del que significa del número.
Ah, gracias por esto, por lo que reconocer -90 y +90 es fácil, pero determinar si un número está entre -90.0 y +90.0 es más que un desafío. Si solo busco -90 o 90, es simplemente un texto simple '-90' o '90' que puedo analizar fácilmente, pero si estoy buscando números entre ellos, entonces se convierte en algo más que solo procesar texto . ¿Entiendo eso todo correctamente? Así es como interpreté lo que dijiste. – Xaisoft
@ Xaisoft: sí, lo interpretó correctamente. –
La respuesta es sencilla:
Si puede resolver su problema sin expresiones regulares (con sólo funciones de cadena), no utiliza expresiones regulares. Como se dijo en un libro que he leído: las expresiones regulares son violencia sobre la computadora.
Si es complicado utilizar las funciones de cadenas de idiomas, use expresiones regulares.
Aunque es un consejo práctico, no creo que esta respuesta sea necesariamente * completa * consejo. Esta pregunta en particular no tiene nada que ver con el manejo de cadenas más allá del hecho de que el usuario está mirando representaciones de cadenas de datos decimales. – GrayWizardx
sin querer ser circular u obtuso, se debe utilizar expresiones regulares cuando se tiene una cadena que contiene información estructurada en un regular language, y quiere convertir esta cadena en un modelo de objetos.
Gracias por el enlace. – Xaisoft
Diría que las expresiones regex son más efectivas en Strings. Para otros tipos de datos, las manipulaciones de ese tipo de datos generalmente serán más intuitivas y proporcionarán mejores resultados.
Por ejemplo, si sabe que está tratando con DateTime, puede usar los métodos Parse y TryParse con los diferentes formatos y generalmente será más confiable que sus propias expresiones regulares.
En su ejemplo, se trata de números, de modo que trátelos en consecuencia.
Regex es muy potente, pero no es el código más fácil de leer y depurar. Cuando haya otra solución confiable a mano, probablemente debería hacerlo.
Esto es técnicamente correcto pero incompleto: la expresión regular es más efectiva en cadenas * que contienen datos regulares *. –
caso de uso básico de expresiones regulares: -
que necesitas "pares de valores clave" - Tanto la clave y valores están integrados dentro de otro texto ruidoso - no puedo ser visitada o aislada de otra manera.
Necesita automatizar la extracción de estos valores haciendo un bucle sobre varios documentos.
El número y la combinación de pares de valores clave se pueden descubrir a medida que progresa el análisis a través del texto.
- 1. ¿Cuándo no debería usar expresiones regulares?
- 2. Usar expresiones regulares para comparar números
- 3. Usar expresiones regulares para analizar HTML: ¿por qué no?
- 4. ¿es posible usar expresiones regulares en C++?
- 5. jQuery selector: contiene - Usar expresiones regulares
- 6. ¿Cómo usar expresiones regulares en MySQL?
- 7. Clojure: ¿Cómo usar variables en expresiones regulares?
- 8. ¿Puedo usar expresiones regulares para encontrar el índice de X?
- 9. Cómo usar expresiones regulares para utf8 en ruby
- 10. ¿Cómo usar expresiones regulares en wget para rechazar archivos?
- 11. Usar expresiones regulares en una cadena para strpos()
- 12. ¿Cómo usar expresiones regulares para analizar HTML en Java?
- 13. Partido hasta x expresiones regulares o y expresiones regulares
- 14. expresiones regulares Las expresiones para todos los símbolos no alfanuméricos
- 15. Para usar OpenID o no usar?
- 16. Para usar vistas o no usar vistas
- 17. Notepad ++ expresiones regulares no codiciosas
- 18. Expresiones regulares de Python O
- 19. Python expresiones regulares no codiciosos
- 20. ¿Podemos usar expresiones regulares en patrones de URL web.xml?
- 21. ¿Cómo puedo usar expresiones regulares con Mongodb ODM de Doctrine?
- 22. ¿Cómo usar las variables awk en expresiones regulares?
- 23. C++: ¿qué biblioteca de expresiones regulares debería usar?
- 24. ¿Puedo usar expresiones regulares con String.Replace en C#?
- 25. ¿En qué casos es mejor usar expresiones regulares?
- 26. Para usar goto o no?
- 27. Escribir una mejor expresión de expresiones regulares para no usar perezoso repetición cuantificador
- 28. Raspado de pantalla: expresiones regulares o expresiones XQuery?
- 29. Expresiones regulares y GWT
- 30. Cualquier buen software de creación de expresiones regulares o herramientas en línea para crear expresiones regulares
Se agregó una etiqueta C# ya que su pregunta anterior fue para C#. Espero que esté bien. – Shoban
No creo que esta pregunta sea específica de C#. –
la pregunta original era C# -implementación específica; esta pregunta no es específica de la implementación. –