2010-11-04 36 views
18

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?

+0

Se agregó una etiqueta C# ya que su pregunta anterior fue para C#. Espero que esté bien. – Shoban

+4

No creo que esta pregunta sea específica de C#. –

+0

la pregunta original era C# -implementación específica; esta pregunta no es específica de la implementación. –

Respuesta

42

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.

+3

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

+1

@ Xaisoft: sí, lo interpretó correctamente. –

0

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.

+0

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

2

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.

+0

Gracias por el enlace. – Xaisoft

3

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.

+0

Esto es técnicamente correcto pero incompleto: la expresión regular es más efectiva en cadenas * que contienen datos regulares *. –

0

caso de uso básico de expresiones regulares: -

  1. 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.

  2. Necesita automatizar la extracción de estos valores haciendo un bucle sobre varios documentos.

  3. 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.

Cuestiones relacionadas