Usar expresiones regulares para extraer parte de un texto

ExtractingTextUsingRegex_RenatoGroffe

Enlaces: Lenguaje de expresiones regulares

Ejemplo 1:

Ejemplo 2:

Los métodos IsValidEmail y DomainMapper pueden estar incluidos en una biblioteca de métodos de la utilidad de expresiones regulares o pueden incluirse como métodos estáticos o de instancia privados en la clase de aplicación.

Expresión Regular para IsValidEmail: ^(?(«)(«.+?(?<!\\)»@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&’\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))»(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$

Ejemplo 3: El patrón de expresión regular (Mr\.? |Mrs\.? |Miss |Ms\.? ) busca coincidencias con cualquier aparición de «Mr «, «Mr. » , «Mrs «, «Mrs. » , «Miss «, «Ms o «Ms. » . La llamada al método Regex.Replace reemplaza la cadena coincidente con String.Empty; es decir, la quita de la cadena original.

Ejemplo 4: Duplicar palabras accidentalmente es un error frecuente que cometen los escritores. Se puede usar una expresión regular para identificar palabras duplicadas, como se muestra en el ejemplo siguiente.

El patrón de expresión regular \b(\w+?)\s\1\b se puede interpretar de la manera siguiente:
\b: Empieza en un límite de palabras.
(\w+?): Coincide con uno o más caracteres de palabra, pero con el menor número de caracteres posible. Juntos, forman un grupo al que se puede hacer referencia como \1.
\s: Coincide con un carácter de espacio en blanco.
\1: Coincide con la subcadena que es igual al grupo denominado \1.
\b: Coincide con un límite de palabras.

Ejemplo 5: En el ejemplo siguiente se muestra la eficacia de las expresiones regulares, además de la flexibilidad que ofrecen las características de globalización de .NET Framework. Se usa el objeto NumberFormatInfo para determinar el formato de los valores de divisa en la referencia cultural actual del sistema. A continuación, se usa dicha información para construir dinámicamente una expresión regular que extrae los valores de divisa del texto. Para cada coincidencia, se extrae el subgrupo que solo contiene la cadena numérica, se convierte el subgrupo en un valor Decimal y se calcula un total acumulativo.

Ejemplo 6: Buscar enlaces a páginas web

href: Busca coincidencias con la cadena literal «href». La búsqueda no distingue entre mayúsculas y minúsculas.
\s*: Busca coincidencias con cero o más caracteres de espacio en blanco.
=: Busca coincidencias con el signo de igualdad.
\s*: Busca coincidencias con cero o más caracteres de espacio en blanco.
(?:[«‘](?[^»‘]*)»|(?\S+)): Busca coincidencias con uno de los siguientes elementos sin asignar el resultado a un grupo capturado:

  1. Una comilla o apóstrofo, seguido de cero o más apariciones de cualquier carácter que no sea una comilla o un apóstrofo, seguido por una comilla o un apóstrofo. Este modelo incluye el grupo denominado 1.
  2. Uno o más caracteres que no sean un espacio en blanco. Este modelo incluye el grupo denominado 1.

(?[^»‘]*): Asigna cero o más apariciones de cualquier carácter distinto de una comilla o un apóstrofo al grupo de captura denominado 1.
«(?\S+): Asigna uno o más caracteres que no sean un espacio en blanco al grupo de captura denominado 1.

Ejemplo 7: El ejemplo de código siguiente se utiliza el método de Regex.Replace para reemplazar fechas con el formato mm/dd/yy por fechas con el formato dd-mm-yy.

\b: Comienza la búsqueda de coincidencias en un límite de palabras.
(?\d{1,2}): Buscar coincidencias con uno o dos dígitos decimales. Éste es el grupo capturado month.
/: Buscar coincidencias con una barra diagonal.
(?\d{1,2}): Buscar coincidencias con uno o dos dígitos decimales. Este es el grupo capturado day.
/: Buscar coincidencias con una barra diagonal.
(?\d{2,4}): Busca coincidencias con dos a cuatro dígitos decimales. Este es el grupo capturado year.
\b: Finaliza la búsqueda de coincidencias en un límite de palabras.

$(day): Agregar la cadena capturada por el grupo de captura day.
: Agregar un guión.
$(month): Agregar la cadena capturada por el grupo de captura month.
: Agregar un guión.
$(year): Agregar la cadena capturada por el grupo de captura year.

Ejemplo 8: Puede utilizar el método CleanInput definido en este ejemplo para quitar caracteres potencialmente dañinos especificados en un campo de texto que acepta datos proporcionados por el usuario. En este caso, CleanInput quita todos los caracteres no alfanuméricos excepto los puntos (.), los símbolos de arroba (@) y los guiones (-), y devuelve la cadena restante. Sin embargo, puede modificar el patrón de expresión regular para que quite cualquier carácter que no deba incluirse en una cadena de entrada.

El modelo de expresión regular [^\w\.@-] coincide con cualquier carácter que no sea un carácter alfabético, un punto, un símbolo @ o un guión. Un carácter alfabético es cualquier letra, dígito decimal o conector de puntuación como un subrayado. Cualquier carácter que coincida con este modelo es reemplazado por String.Empty, que es la cadena definida por el modelo de reemplazo. Para permitir caracteres adicionales en los datos proporcionados por el usuario, agregue esos caracteres a la clase de caracteres en el patrón de expresión regular. Por ejemplo, el patrón de expresión regular [^\w\.@-\\%] también permite un símbolo de porcentaje y una barra diagonal inversa en una cadena de entrada.

Ejemplo 9: En el ejemplo se usa el método Match.Result para devolver el protocolo seguido por un signo de dos puntos y seguido a su vez por el número de puerto.

^: Comenzar la búsqueda de coincidencia al principio de la cadena.
(?\w+): Coincide con uno o varios caracteres que se usan para formar palabras. Denominar a este grupo proto.
://: Buscar una coincidencia con un signo dos puntos seguido por dos barras diagonales.
[^/]+?: Buscar una coincidencia con una o más apariciones (pero las mínimas posibles) de cualquier carácter distinto de una barra diagonal.
(?:\d+)?: Buscar una coincidencia con cero o una aparición de un signo de dos puntos seguida por uno o más caracteres de dígito. Denominar a este grupo port.
/: Buscar una coincidencia con una barra diagonal.