Compartir vía


Uso de expresiones regulares en Visual Studio

Visual Studio usa expresiones regulares de .NET para buscar y reemplazar texto.

Sintaxis de expresiones regulares

La tabla siguiente contiene algunos caracteres de expresión regular, operadores, construcciones y ejemplos de patrones. Para obtener una referencia más completa, consulte lenguaje de expresiones regulares.

Propósito Expresión Ejemplo
Coincidencia con cualquier carácter (excepto un salto de línea). Para obtener más información, consulte Cualquier carácter. . a.o coincide con "aro" en "around" y "abo" en "about", pero no con "acro" en "across"
Coincidencia con cero o más apariciones de la expresión anterior (coincidencias con tantos caracteres como sea posible). Para obtener más información, consulte el artículo de coincidencia con cero o más veces. * a*r coincide con "r" en "rack", "ar" en "ark" y "aar" en "aardvark".
Coincidencia con cualquier carácter cero o más veces. .* c.*e coincide con "cke" en "racket", "comme" en "comment" y "code" en "code"
Coincidir con una o más ocurrencias de la expresión anterior (coincidir con la mayor cantidad de caracteres posible). Para obtener más información, consulte el artículo de coincidencia con una o más veces. + e+d coincide con "eed" en "feeder" y "ed" en "faded".
Buscar cualquier carácter coincidente una o más veces. .+ e.+e coincide con "eede" en "feeder", pero no encuentra ninguna coincidencia en "feed"
Coincidencia con cero o más apariciones de la expresión anterior (coincidencia con el menor número de caracteres posible). Para obtener más información, consulte el artículo de coincidencia con cero o más veces (coincidencia diferida). *? \w*?d coincide con "fad" y "ed" en "faded", pero no con toda la palabra "faded" debido a la coincidencia diferida.
Empareja una o varias apariciones de la expresión precedente (empareja la menor cantidad de caracteres posible). Para obtener más información, consulte el artículo de coincidencia con uno o más veces (coincidencia diferida). +? e\w+? coincide con "ee" en "asleep" y "ed" en "faded", pero no encuentra ninguna coincidencia en "fade".
Delimitación de la cadena coincidente al principio de una cadena o línea. ^ ^car coincide con la palabra "car" solo cuando aparece al principio de una línea
Delimitación de la cadena coincidente al final de una línea. \r?$ car\r?$ coincide con "coche" solo cuando aparece al final de una línea
Delimitar la cadena coincidente al final del archivo $ car$ coincide con "car" solo cuando aparece al final del archivo
Coincidencia con cualquier carácter único de un conjunto [abc] b[abc] coincide con "ba", "bb" y "bc"
Coincidir con cualquier carácter de un intervalo de caracteres [a-f] be[n-t] coincide con "bet" en "between", "ben" en "beneath" y "bes" en "beside", pero no encuentra ninguna coincidencia en "below".
Capturar e numerar implícitamente la expresión contenida entre paréntesis () ([a-z])X\1 coincide con "aXa" y "bXb", pero no con "aXb". "\1" hace referencia al primer grupo de expresiones "[a-z]". Para obtener más información, consulte Grupos de captura y patrones de reemplazo.
Invalidar un partido (?!abc) real(?!ity) coincide con "real" en "realty" y "realmente", pero no en "realidad". También encuentra el segundo "real" (pero no el primer "real") en "realityreal".
Coincide con cualquier carácter que no esté en un conjunto determinado de caracteres. Para obtener más información, consulte Grupo de caracteres negativos. [^abc] be[^n-t] coincide con "bef" en "before", "beh" en "behind" y "bel" en "below", pero no encuentra ninguna coincidencia en "beneath".
Coincide con la expresión anterior o la que aparece después del símbolo | (sponge|mud) bath coincide con "sponge bath" y "mud bath"
Escape del carácter que sigue a la barra diagonal inversa. \ \^ corresponde al carácter ^
Especifique el número de repeticiones del carácter o grupo anterior. Para obtener más información, consulte el artículo de coincidencia exacta n veces. {n}, donde 'n' es el número de repeticiones x(ab){2}x coincide con "xababx"
x(ab){2,3}x coincide con "xababx" y "xabababx", pero no con "xababababx"
Coincidencia con el texto en una clase de caracteres Unicode. Para obtener más información sobre las clases de caracteres Unicode, vea Propiedades de caracteres Unicode Standard 15.0. \p{X}, donde "X" es el número Unicode. \p{Lu} coincide con "T" y "D" en "Thomas Doe"
Coincidencia con un límite de palabra. \b (fuera de una clase de caracteres \b especifica un límite de palabras y dentro de una clase de caracteres \b un retroceso). \bin coincide con "in" en "inside", pero no encuentra ninguna coincidencia en "pinto".
Coincidencia con un salto de línea (es decir, con un retorno de carro seguido de una nueva línea o solo una nueva línea) \r?\n End\r?\nBegin coincide con "End" y "Begin" solo cuando "End" es la última cadena de una línea y "Begin" es la primera cadena de la línea siguiente.
Coincidencia con cualquier carácter de una palabra. \w a\wd coincide con "add" y "a1d", pero no con "a d"
Coincidencia con cualquier carácter de espacio en blanco. \s Public\sInterface coincide con la frase "Public Interface"
Coincidencia con cualquier carácter de dígito decimal. \d \d coincide con "4" y "0" en "wd40".

Una expresión regular de ejemplo que combina algunos de los operadores y construcciones para que coincidan con un número hexadecimal es \b0[xX]([0-9a-fA-F]+)\b. Esta expresión coincide con "0xc67f", pero no "0xc67g".

Sugerencia

En sistemas operativos Windows, la mayoría de las líneas terminan en "\r\n" (un retorno de carro seguido de una nueva línea). Estos caracteres no son visibles, pero están presentes en el editor y se pasan al servicio de expresiones regulares de .NET. Cuando trate con archivos de la web o de un sistema operativo que no sea Windows, asegúrese de tener en cuenta la posibilidad de que usen una nueva línea solo para un salto de línea.

Grupos de captura y patrones de sustitución

Un grupo de captura delimita una subexpresión de una expresión regular y captura una subcadena de una cadena de entrada. Puede usar grupos capturados dentro de la propia expresión regular (por ejemplo, para buscar una palabra repetida) o en un patrón de reemplazo. Para obtener información detallada, consulte "Agrupaciones en expresiones regulares" en la sección .

Para crear un grupo de captura numerado, rodea la subexpresión con paréntesis en el patrón de expresión regular. Las capturas se numeran automáticamente de izquierda a derecha en función de la posición del paréntesis de apertura en la expresión regular. Para acceder al grupo capturado, tenga en cuenta los ejemplos siguientes:

  • En la expresión regular: Use \number. Por ejemplo, \1 en la expresión regular (\w+)\s\1 hace referencia al primer grupo de captura (\w+).

  • En un patrón de reemplazo: usar $number. Por ejemplo, la expresión regular agrupada (\d)([a-z]) define dos grupos: el primer grupo contiene un solo dígito decimal y el segundo grupo contiene un solo carácter entre un y z. La expresión busca cuatro coincidencias en la cadena siguiente: 1a 2b 3c 4d. La cadena de reemplazo z$1 hace referencia solo al primer grupo ($1) y convierte la cadena en z1 z2 z3 z4.

En la imagen siguiente se muestra una expresión regular (\w+)\s\1 y una cadena de reemplazo $1. Tanto la expresión regular como el patrón de reemplazo hacen referencia al primer grupo de captura que se numera automáticamente 1. Cuando se elige Reemplazar todo en el cuadro de diálogo Reemplazo rápido de Visual Studio, se quitan las palabras repetidas del texto.

Captura de pantalla de Reemplazo rápido que muestra un grupo de captura numerado en Visual Studio.

Sugerencia

En el cuadro de diálogo Reemplazo rápido, asegúrese de seleccionar el botón Usar expresiones regulares o presione Alt+E.

Grupos de captura nombrados

En lugar de confiar en la numeración automática de un grupo de captura, puede asignarle un nombre. La sintaxis de un grupo de captura con nombre es (?<name>subexpression).

Los grupos de captura con nombre, como los grupos de captura numerados, se pueden usar dentro de la propia expresión regular o en un patrón de reemplazo. Para acceder al grupo de captura con nombre, tenga en cuenta los ejemplos siguientes:

  • En la expresión regular: Use \k<name>. Por ejemplo, \k<repeated> en la expresión regular (?<repeated>\w+)\s\k<repeated> hace referencia al grupo de captura denominado repeated y cuya subexpresión es \w+.

  • En un patrón de reemplazo: Use ${name}. Por ejemplo, ${repeated}.

En la imagen siguiente se muestra una expresión regular (?<repeated>\w+)\s\k<repeated> y una cadena de reemplazo ${repeated}. Tanto la expresión regular como el patrón de reemplazo hacen referencia al grupo de captura denominado repeated. Cuando se elige Reemplazar todo en el cuadro de diálogo Reemplazo rápido de Visual Studio, se quitan las palabras repetidas del texto.

Captura de pantalla de Reemplazo rápido que muestra un grupo de captura con nombre en Visual Studio.

Sugerencia

Asegúrese de seleccionar el botón Usar expresiones regulares (o presione Alt+E) en el cuadro de diálogo Reemplazo rápido.

Para obtener más información sobre los grupos de capturas con nombre, consulte Subexpresiones coincidentes con nombre. Para obtener más información sobre las expresiones regulares que se usan en patrones de reemplazo, vea Sustituciones en expresiones regulares.

Ejemplos

Patrón Descripción
int ([_A-Za-z][_A-Za-z0-9]*) Buscar coincidencias con definiciones de enteros únicos. Los identificadores comienzan con una letra mayúscula o minúscula, seguidas de cero o más (indicadas por *) letras o números. El identificador se captura como $1 entre paréntesis externos.
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ Coincide con las declaraciones de enteros de C# que se inicializan en literales enteros, capturando las distintas partes, incluidos el nivel de acceso, modificadores como const o static, el identificador y el valor definido. Tenga en cuenta el uso de \s+ para al menos un carácter de espacio en blanco o \s* si es posible que se produzcan o no espacios en blanco.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) Coincide con la línea de apertura de un bucle foreach. Los paréntesis literales se escapan con una barra diagonal inversa (\). Los distintos grupos se capturan como $1, $2 y $3 por los paréntesis sin escape.
#define\s+([_A-Za-z][_A-Za-z0-9]*) Coincide con las definiciones de #define (sin el valor, si existe). El token definido se almacena en $1.
#include\s+["<](.*)[">] La coincidencia incluye un archivo de origen de C++.