Elementos del lenguaje de expresiones regulares

Una expresión regular es un modelo con el que el motor de expresiones regulares intenta buscar una coincidencia en el texto de entrada. Un modelo consta de uno o más literales de carácter, operadores o estructuras. Para obtener una breve introducción, vea Expresiones regulares de .NET Framework.

Cada sección de esta referencia rápida enumera una categoría determinada de caracteres, operadores y construcciones que puede usar para definir expresiones regulares:

  • Escapes de carácter

  • Clases de caracteres

  • Delimitadores

  • Construcciones de agrupamiento

  • Cuantificadores

  • Construcciones de referencia inversa

  • Construcciones de alternancia

  • Sustituciones

  • Construcciones misceláneas

Escapes de carácter

El carácter de barra diagonal inversa (\) en una expresión regular indica que el carácter que lo sigue es un carácter especial (como se muestra en la tabla siguiente) o que se debe interpretar literalmente. Para obtener más información, vea Escapes de carácter.

Carácter de escape

Descripción

Modelo

Coincidencias

\a

Coincide con un carácter de campana, \u0007.

\a

"\u0007" en "Error!" + '\u0007'

\b

En una clase de caracteres, coincide con un retroceso, \u0008.

[\b]{3,}

"\b\b\b\b" en "\b\b\b\b"

\t

Coincide con una tabulación, \u0009.

(\w+)\t

"artículo1\t", "artículo2\t" en "artículo1\tartículo2\t"

\r

Coincide con un retorno de carro, \u000D. (\r no es equivalente al carácter de nueva línea, \n.)

\r\n(\w+)

"\r\nEstas" en "\r\nEstas son\ndos líneas."

\v

Coincide con una tabulación vertical, \u000B.

[\v]{2,}

"\v\v\v" en "\v\v\v"

\f

Coincide con un avance de página, \u000C.

[\f]{2,}

"\f\f\f" en "\f\f\f"

\n

Coincide con una nueva línea, \u000A.

\r\n(\w+)

"\r\nEstas" en "\r\nEstas son\ndos líneas."

\e

Coincide con un escape, \u001B.

\e

"\x001B" en "\x001B"

\nnn

Usa la representación octal para especificar un carácter (nnn consta de tres dígitos como máximo).

\w\040\w

"a b", "c d" en

"a bc d"

\xnn

Usa la representación hexadecimal para especificar un carácter (nn consta de exactamente dos dígitos).

\w\x20\w

"a b", "c d" en

"a bc d"

\cX

\cx

Coincide con el carácter de control ASCII especificado por X o x, donde X o x es la letra del carácter de control.

\cC

"\x0003" en "\x0003" (Ctrl-C)

\unnnn

Coincide con un carácter Unicode usando la representación hexadecimal (exactamente cuatro dígitos, según representa nnnn).

\w\u0020\w

"a b", "c d" en

"a bc d"

\

Cuando va seguido de un carácter que no se reconoce como un carácter de escape en esta y otras tablas de este tema, coincide con ese carácter. Por ejemplo, \* es igual que \x2A. Esto permite que el motor de expresiones regulares elimine la ambigüedad de los elementos del lenguaje (como * o ?) y los literales de carácter (representados por \* o \?).

\d+[\+-x\*]\d+\d+[\+-x\*\d+

"2+2" y "3*9" en "(2+2) * 3*9"

Volver al principio

Clases de carácter

Una clase de caracteres coincide con cualquiera de un juego de caracteres. Las clases de caracteres incluyen los elementos del lenguaje enumerados en la tabla siguiente. Para obtener más información, vea Clases de carácter.

Clase de carácter

Descripción

Modelo

Coincidencias

[grupo_caracteres]

Coincide con cualquier carácter único de grupo_caracteres. De forma predeterminada, la coincidencia distingue entre mayúsculas y minúsculas.

[ae]

"a" en "casa"

"a", "e" en "ave"

[^grupo_caracteres]

Negación: coincide con cualquier carácter individual que no esté en grupo_caracteres. De forma predeterminada, los caracteres de grupo_caracteres distinguen entre mayúsculas y minúsculas.

[^aei]

"r", "n", "o" en "reino"

[primero-último]

Intervalo de caracteres: coincide con cualquier carácter individual en el intervalo de primero a último.

[A-Z]

"A", "B" en "AB123"

.

Carácter comodín: coincide con cualquier carácter excepto con \n.

a.e

"ave" en "llave"

"ate" en "yate"

\p{name}

Coincide con cualquier carácter único que pertenezca a la categoría general Unicode o al bloque con nombre especificado por nombre.

\p{Lu}

\p{IsCyrillic}

"C", "L" en "City Lights"

"Д", "Ж" in "ДЖem"

\P{name}

Coincide con cualquier carácter único que no pertenezca a la categoría general Unicode o al bloque con nombre especificado por nombre.

\P{Lu}

\P{IsCyrillic}

"i", "t", "y" en "City"

"e", "m" in "ДЖem"

\w

Coincide con cualquier carácter de una palabra.

\w

"I", "D", "A", "1", "3" en "ID A1.3"

\W

Coincide con cualquier carácter que no pertenezca a una palabra.

\W

" ", "." en "ID A1.3"

\s

Coincide con cualquier carácter que sea un espacio en blanco.

\w\s

"D " en "ID A1.3"

\S

Coincide con cualquier carácter que no sea un espacio en blanco.

\s\S

" _" en "int __ctr"

\d

Coincide con cualquier dígito decimal.

\d

"4" en "4 = IV"

\D

Coincide con cualquier carácter que no sea un dígito decimal.

\D

" ", "=", " ", "I", "V" en "4 = IV"

Volver al principio

Delimitadores

Los delimitadores, o aserciones atómicas de ancho cero, hacen que una coincidencia tenga éxito o no dependiendo de la posición actual en la cadena, pero no hacen que el motor avance por la cadena ni consuma caracteres. Los metacaracteres enumerados en la tabla siguiente son delimitadores. Para obtener más información, vea Delimitadores en expresiones regulares.

Aserción

Descripción

Modelo

Coincidencias

^

La coincidencia debe comenzar al principio de la cadena o de la línea.

^\d{3}

"901-" en

"901-333-"

$

La coincidencia se debe producir al final de la cadena o antes de \n al final de la línea o de la cadena.

-\d{3}$

"-333" en

"-901-333"

\A

La coincidencia se debe producir al principio de la cadena.

\A\d{3}

"901" en

"901-333-"

\Z

La coincidencia se debe producir al final de la cadena o antes de \n al final de la cadena.

-\d{3}\Z

"-333" en

"-901-333"

\z

La coincidencia se debe producir al final de la cadena.

-\d{3}\z

"-333" en

"-901-333"

\G

La coincidencia se debe producir en el punto en el que finalizó la coincidencia anterior.

\G\(\d\)

"(1)", "(3)", "(5)" en "(1)(3)(5)[7](9)"

\b

La coincidencia se debe producir en un límite entre un carácter \w (alfanumérico) y un carácter \W (no alfanumérico).

\b\w+\s\w+\b

"ellos ellos" en "ellos tema ellos ellos"

\B

La coincidencia no se debe producir en un límite \b.

\Bend\w*\b

"fin", "final" en "finalizar finalista finalizador finalizó"

Volver al principio

Construcciones de agrupamiento

Las construcciones de agrupamiento definen subexpresiones de una expresión regular y, normalmente, capturan subcadenas de una cadena de entrada. Las construcciones de agrupamiento incluyen los elementos del lenguaje enumerados en la tabla siguiente. Para obtener más información, vea Construcciones de agrupamiento.

Construcción de agrupamiento

Descripción

Modelo

Coincidencias

(subexpresión)

Captura la subexpresión coincidente y le asigna un número ordinal de base cero.

(\w)\1

"aa" en "aarón"

(?<nombre> subexpresión)

Captura la subexpresión coincidente en un grupo con nombre.

(?<double>\w)\k<double>

"aa" en "aarón"

(?<nombre1-nombre2> subexpresión)

Define una definición de grupo de equilibrio. Para obtener más información, vea la sección "Definiciones de grupos de equilibrio" en Construcciones de agrupamiento.

(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$

"((1-3)*(3-1))" en "3+2^((1-3)*(3-1))"

(?: subexpresión)

Define un grupo sin captura.

Write(?:Line)?

"WriteLine" en "Console.WriteLine()"

(?imnsx-imnsx: subexpresión)

Aplica o deshabilita las opciones especificadas dentro de subexpresión. Para obtener más información, vea Opciones de expresiones regulares.

A\d{2}(?i:\w+)\b

"A12xl", "A12XL" en "A12xl A12XL a12xl"

(?= subexpresión)

Aserción de búsqueda anticipada positiva de ancho cero.

\w+(?=\.)

"es", "corría" y "hermoso" en "Él es. El perro corría. El sol está hermoso."

(?! subexpresión)

Aserción de búsqueda anticipada negativa de ancho cero.

\b(?!un)\w+\b

"seguro", "usado" en "aseguro seguro unidad usado"

(?<= subexpresión)

Aserción de búsqueda tardía positiva de ancho cero.

(?<=19)\d{2}\b

"99", "50", "05" en "1851 1999 1950 1905 2003"

(?<! subexpresión)

Aserción de búsqueda tardía negativa de ancho cero.

(?<!19)\d{2}\b

"51", "03" en "1851 1999 1950 1905 2003"

(?> subexpresión)

Subexpresión sin retroceso (o "expansiva").

[13579](?>A+B+)

"1ABB", "3ABB" y "5AB" en "1ABB 3ABBC 5AB 5AC"

Volver al principio

Cuantificadores

Un cuantificador especifica cuántas instancias del elemento anterior (que puede ser un carácter, un grupo o una clase de caracteres) debe haber en la cadena de entrada para que se encuentre una coincidencia. Los cuantificadores incluyen los elementos del lenguaje enumerados en la tabla siguiente. Para obtener más información, vea Cuantificadores.

Cuantificador

Descripción

Modelo

Coincidencias

*

Coincide con el elemento anterior cero o más veces.

\d*\. \d

".0", "19.9", "219.9"

+

Coincide con el elemento anterior una o más veces.

"be+"

"caí" en "caída", "be" en "bebé"

?

Coincide con el elemento anterior cero veces o una vez.

"rai? n"

"rata", "raicilla"

{n}

Coincide con el elemento anterior exactamente n veces.

",\d{3}"

",043" en "1,043.6", ",876", ",543", y ",210" en "9,876,543,210"

{n,}

Coincide con el elemento anterior al menos n veces.

"\d{2,}"

"166", "29", "1930"

{n,m}

Coincide con el elemento anterior al menos n veces, pero no más de m veces.

"\d{3,5}"

"166", "17668"

"19302" en "193024"

*?

Coincide con el elemento anterior cero o más veces, pero el menor número de veces que sea posible.

\d*? \. \d

".0", "19.9", "219.9"

+?

Coincide con el elemento anterior una o más veces, pero el menor número de veces que sea posible.

"be+?"

"be" en "bebida", "be" en "bebé"

??

Coincide con el elemento anterior cero o una vez, pero el menor número de veces que sea posible.

"rai?? n"

"rata", "raicilla"

{n}?

Coincide con el elemento anterior exactamente n veces.

",\d{3}?"

",043" en "1,043.6", ",876", ",543", y ",210" en "9,876,543,210"

{n,}?

Coincide con el elemento anterior al menos n veces, pero el menor número de veces posible.

"\d{2,}?"

"166", "29", "1930"

{n,m}?

Coincide con el elemento anterior entre n y m veces, pero el menor número de veces posible.

"\d{3,5}?"

"166", "17668"

"193", "024" en "193024"

Volver al principio

Construcciones de referencia inversa

Una referencia inversa permite identificar una subexpresión coincidente previamente más adelante en la misma expresión regular. En la tabla siguiente se enumeran las construcciones de referencia inversa admitidas en las expresiones regulares de .NET Framework. Para obtener más información, vea Construcciones de referencia inversa.

Construcción de referencias inversas

Descripción

Modelo

Coincidencias

\number

Referencia inversa. Coincide con el valor de una subexpresión numerada.

(\w)\1

"aa" en "aarón"

\k<name>

Referencia inversa con nombre Coincide con el valor de una expresión con nombre.

(?<char>\w)\k<char>

"aa" en "aarón"

Volver al principio

Construcciones de alternancia

Las estructuras de alternancia modifican una expresión regular para habilitar o no la coincidencia. Estas construcciones incluyen los elementos del lenguaje enumerados en la tabla siguiente. Para obtener más información, vea Construcciones de alternancia.

Construcciones de alternancia

Descripción

Modelo

Coincidencias

|

Coincide con cualquier elemento separado por el carácter de barra vertical (|).

th(e|is|at)

"el", "este" en "este es el día. "

(?(expresión)sí|no)

Coincide con sí si expresión coincide; de lo contrario, coincide con la parte opcional no. expresión se interpreta como una aserción de ancho cero.

(?(A)A\d{2}\b|\b\d{3}\b)

"A10", "910" en "A10 C103 910"

(?(nombre)sí|no)

Coincide con sí si la captura con nombre nombre tiene una coincidencia; de lo contrario, coincide con la parte opcional no.

(?<quoted>")?(?(quoted).+?"|\S+\s)

Dogs.jpg, "Yiska playing.jpg" en "Dogs.jpg "Yiska playing.jpg""

Volver al principio

Sustituciones

Las sustituciones son elementos del lenguaje de expresiones regulares que se admiten en modelos de reemplazo. Para obtener más información, vea Sustituciones. Los metacaracteres enumerados en la tabla siguiente son aserciones atómicas de ancho cero.

Carácter

Descripción

Modelo

Modelo de reemplazo

Cadena de entrada

Cadena de resultado

$number

Sustituye la subcadena que coincide con el grupo número.

\b(\w+)(\s)(\w+)\b

$3$2$1

"one two"

"two one"

${name}

Sustituye la subcadena que coincide con el grupo nombre.

\b(?<word1>\w+)(\s)(?<word2>\w+)\b

${word2} ${word1}

"one two"

"two one"

$$

Sustituye un "$" literal.

\b(\d+)\s?USD

$$$1

"103 USD"

"$103"

$&

Sustituye una copia de toda la coincidencia.

(\$*(\d*(\.+\d+)?){1})

**$&

"$1.30"

"**$1.30**"

$`

Sustituye todo el texto de la cadena de entrada delante de la coincidencia.

B+

$`

"AABBCC"

"AAAACC"

$'

Sustituye todo el texto de la cadena de entrada detrás de la coincidencia.

B+

$'

"AABBCC"

"AACCCC"

$+

Sustituye el último grupo capturado.

B+(C+)

$+

"AABBCCDD"

AACCDD

$_

Sustituye toda la cadena de entrada.

B+

$_

"AABBCC"

"AAAABBCCCC"

Volver al principio

Construcciones misceláneas

Las estructuras misceláneas modifican un modelo de expresión regular o proporcionan información sobre él. En la tabla siguiente se enumeran las construcciones misceláneas admitidas por .NET Framework. Para obtener más información, vea Construcciones misceláneas.

Construcción

Definición

Ejemplo

(?imnsx-imnsx)

Establece o deshabilita opciones como la no distinción entre mayúsculas y minúsculas en medio de un modelo. Para obtener más información, vea Opciones de expresiones regulares.

\bA(?i)b\w+\b coincide con "ABA", "Able" en "ABA Able Act"

(?# comentario)

Comentario alineado. El comentario termina en el primer paréntesis de cierre.

\bA(?#Matches words starting with A)\w+\b

# [hasta el final de la línea]

Comentario en modo X. El comentario comienza en un carácter # sin escape y continúa hasta el final de la línea.

(?x)\bA\w+\b#Matches words starting with A

Volver al principio

Vea también

Referencia

System.Text.RegularExpressions

Regex

Conceptos

Expresiones regulares de .NET Framework

Clases de expresiones regulares

Otros recursos

Procedimientos recomendados con expresiones regulares en .NET Framework

Ejemplos de expresiones regulares