English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Expresión regular Es un patrón de coincidencia para el texto de entrada.
El framework .Net proporciona un motor de expresiones regulares que permite este tipo de coincidencia.
El patrón se compone de uno o más caracteres, operadores y estructuras.
A continuación, se enumeran los caracteres, operadores y estructuras utilizados para definir varios tipos de expresiones regulares.
Escape de caracteres
Clase de caracteres
定位点
Construcción de grupo
Determinante
Construcción de referencia inversa
Construcción alternativa
Reemplazo
Constructores misceláneos
El carácter de barra invertida (\) en la expresión regular indica que el carácter que sigue es un carácter especial o debe interpretarse en su sentido literal.
La siguiente tabla enumera los caracteres de escape:
Carácter de escape | Descripción | Patrón | Coincidir |
---|---|---|---|
\a | Coincidir con el carácter de alarma (campana) \u0007 Coincidir. | \a | "Advertencia!" + '\u0007' con "\u0007" |
\b | En la clase de caracteres, coincide con la tecla de retroceso \u0008 Coincidir. | [\b]{3,} | "\b\b\b\b" con "\b\b\b\b" |
\t | Con el carácter de tabulación \u0009 Coincidir. | (\w+)\t | "Name\tAddr\t" con "Name\t" y "Addr\t" |
\r | Coincidir con el carácter de retorno de carro \u000D. (\r y el carácter de nueva línea \n no son equivalentes.). | \r\n(\w+) | "\r\nHello\nWorld." con "\r\nHello" |
\v | Coincidir con el carácter de tabulación vertical \u000B. | [\v]{2,} | "\v\v\v" con "\v\v\v" |
\f | Coincidir con el carácter de cambio de página \u000C. | [\f]{2,} | "\f\f\f" con "\f\f\f" |
\n | Coincidir con el carácter de nueva línea \u000A. | \r\n(\w+) | "\r\nHello\nWorld." con "\r\nHello" |
\e | Con el carácter de escape \u001B Coincide. | \e | "\x001B" con "\x001B" |
\ nnn | Especificar un carácter utilizando la notación octal (nnn consta de dos a tres dígitos). | \w\040\w | El "a b" en "a bc d" y el "c d" |
\x nn | Especificar un carácter utilizando la notación hexadecimal (nn son exactamente dos dígitos). | \w\x20\w | El "a b" en "a bc d" y el "c d" |
\c X \c x | Coincidir con el carácter de control especificado por X o x, donde X o x es la letra del carácter de control. | \cC | "\x0003" con "\x0003" (Ctrl-C) |
\u nnnn | Coincidir con un carácter Unicode utilizando la notación hexadecimal (representado por un número de cuatro dígitos nnnn). | \w\u0020\w | El "a b" en "a bc d" y el "c d" |
\ | Coincide con el carácter cuando está seguido por un carácter de escape no reconocido. | \d+[\+-x\*]\d+\d+[\+-x\*\d+ | "(2+2) * 3*9" en "2+2" y "3*9" |
La clase de caracteres coincide con cualquier carácter de un grupo de caracteres.
La siguiente tabla enumera las clases de caracteres:
Clase de caracteres | Descripción | Patrón | Coincidir |
---|---|---|---|
[character_group] | Coincide con cualquier carácter individual en character_group. Por defecto, la coincidencia es sensible a mayúsculas y minúsculas. | [mn] | El "m" en "mat", el "m" en "moon" y el "n" |
[^character_group] | No: Coincide con cualquier carácter individual que no esté en character_group. Por defecto, los caracteres en character_group son sensibles a mayúsculas y minúsculas. | [^aei] | "avail" 中的 "v" 和 "l" |
[ first - last ] | 字符范围:与从 first 到 last 的范围中的任何单个字符匹配。 | [b-d] | [b-d]irds 可以匹配 Birds、 Cirds、 Dirds |
. | 通配符:与除 \n 之外的任何单个字符匹配。 若要匹配原意句点字符(. 或 \u002E),您必须在该字符前面加上转义符 (\.)。 | a.e | "have" 中的 "ave", "mate" 中的 "ate" |
\p{ name } | 与 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 | \p{Lu} | "City Lights" 中的 "C" 和 "L" |
\P{ name } | 与不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 | \P{Lu} | "City" 中的 "i"、 "t" 和 "y" |
\w | 与任何单词字符匹配。 | \w | "Room#1" 中的 "R"、 "o"、 "m" 和 "1" |
\W | 与任何非单词字符匹配。 | \W | "Room#1" 中的 "#" |
\s | 与任何空白字符匹配。 | \w\s | "ID A1.3" 中的 "D " |
\S | 与任何非空白字符匹配。 | \s\S | "int __ctr" 中的 " _" |
\d | 与任何十进制数字匹配。 | \d | "4 = IV" 中的 "4" |
\D | 匹配不是十进制数的任意字符。 | \D | "4 = IV" 中的 " "、 "="、 " "、 "I" 和 "V" |
定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。
下表列出了定位点:
断言 | Descripción | Patrón | Coincidir |
---|---|---|---|
^ | 必须从字符串或一行的开头开始。 | ^\d{3} | "567-777-" en "567" |
$ | 必须出现在字符串的末尾或出现在行或字符串末尾的 \n 之前。 | -\d{4}$ | "8-12-2012" en "-2012" |
\A | 必须出现在字符串的开头。 | \A\w{4} | "Code-007-" 中的 "Code" |
\Z | 必须出现在字符串的末尾或出现在字符串末尾的 \n 之前。 | -\d{3}\Z | "Bond-901-007" en "-007" |
\z | 必须出现在字符串的末尾。 | -\d{3}\z | "-901-333" en "-333" |
\G | 必须出现在上一个匹配结束的地方。 | \G(\d\) | "(1)3)5)7]9中的 "(1)、 "(3)" y "("5)" |
\b | Coincidir con un borde de palabra, es decir, la posición entre la palabra y el espacio. | er\b | Coincidir con "never" en "er", pero no con "verb" en "er". |
\B | Coincidir con no borde de palabra. | er\B | Coincidir con "verb" en "er", pero no con "never" en "er". |
Las construcciones de grupo describen las subexpresiones de la expresión regular, generalmente utilizadas para capturar subcadenas de la cadena de entrada.
La siguiente tabla enumera las construcciones de grupo:
Construcción de grupo | Descripción | Patrón | Coincidir |
---|---|---|---|
( subexpression ) | Capturar la subexpresión coincidente y asignarla a un número de secuencia de cero. | (\w)1 | "deep" 中的 "ee" |
(?< name >subexpression) | Capturar la subexpresión coincidente en un grupo nombrado. | (?< double>\w)\k< double> | "deep" 中的 "ee" |
(?< name1 -name2 >subexpression) | Definir grupo equilibrado. | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ | "3+2^((1-3)*(3-1))" 中的 "((1-3)*(3-1))" |
(?: subexpression) | Definir grupo no capturado. | Write(?:Line)? | "Console.WriteLine()" 中的 "WriteLine" |
(?imnsx-imnsx:subexpression) | Aplicar o deshabilitar subexpression opción especificada. | A\d{2}(?i:\w+)\b | "A12xl A12XL a12xl" 中的 "A12xl" y "A12XL" |
(?= subexpression) | Afirmación de predicción positiva de ancho cero. | \w+(?=\.) | "He is. The dog ran. The sun is out." 中的 "is", "ran" y "out" |
(?! subexpression) | Afirmación de predicción negativa de ancho cero. | \b(?!un)\w+\b | "unsure sure unity used" 中的 "sure" y "used" |
(?<=subexpression) | Afirmación de retroalimentación de ancho cero. | (?A+B+) | "1ABB 3ABBC 5AB 5"AC" 中的 "1ABB", "3ABB" y "5AB" |
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string input = "1851 1999 1950 1905 2003"; string pattern = @"(?<=19)\d{2}; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } }
El determinante especifica cuántos ejemplos de la última ocurrencia (puede ser un carácter, un grupo o una clase de caracteres) deben existir en la cadena de entrada para que se produzca una coincidencia. Los elementos del lenguaje incluidos en la tabla a continuación.
La siguiente tabla enumera los determinantes:
Determinante | Descripción | Patrón | Coincidir |
---|---|---|---|
* | Coincidir con el elemento anterior cero veces o más veces. | \d*.\d | ".0"、 "19.9"、 "219.9" |
+ | Coincidir con el elemento anterior una vez o más veces. | "be+" | "bee" en "been", "be" en "bent" |
? | Coincidir con el elemento anterior cero veces o una vez. | "rai?n" | "ran"、 "rain" |
{ n } | Coincidir con el elemento anterior exactamente n veces. | ",\d{3} | "1,043.6" en "043", "9,876,543,210" en "876"、 ",543" y ",210" |
{ n ,} | Coincidir con el elemento anterior al menos n veces. | "\d{2,}" | "166"、 "29"、 "1930" |
{ n , m } | Coincidir con el elemento anterior al menos n veces, pero no más de m veces. | "\d{3,5} | "166", "17668", "193024" en "19302" |
*? | Coincidir con el elemento anterior cero veces o más veces, pero lo más mínimo posible. | \d*?\.\d | ".0"、 "19.9"、 "219.9" |
+? | Coincidir con el elemento anterior una vez o más veces, pero lo más mínimo posible. | "be+?" | "be" en "been", "be" en "bent" |
?? | Coincidir con el elemento anterior cero veces o una vez, pero lo más mínimo posible. | "rai??n" | "ran"、 "rain" |
{ n }? | Coincidir con el elemento de liderazgo exactamente n veces. | ",\d{3}?" | "1,043.6" en "043", "9,876,543,210" en "876"、 ",543" y ",210" |
{ n ,}? | Coincidir con la frecuencia del elemento anterior al menos n veces, pero lo más mínimo posible. | "\d{2,}?" | "166"、 "29" y "1930" |
{ n , m }? | Coincidir con la frecuencia del elemento anterior entre n y m, pero lo más mínimo posible. | "\d{3,5}?" | "166", "17668", "193024" en "193" y "024" |
La referencia inversa permite identificar subexpresiones que se coincidieron anteriormente en la expresión regular.
La siguiente tabla enumera las construcciones de referencia inversa:
Construcción de referencia inversa | Descripción | Patrón | Coincidir |
---|---|---|---|
\ number | Referencia inversa. Coincide con el valor del subexpresión numerada. | (\w)1 | "seek" en "ee" |
\k< name > | Referencia inversa nombrada. Coincide con el valor de la expresión nombrada. | (?< char>\w)\k< char> | "seek" en "ee" |
La construcción alternativa se utiliza para modificar la expresión regular para habilitar either/Coincidir o.
La siguiente tabla enumera las construcciones alternativas:
Construcción alternativa | Descripción | Patrón | Coincidir |
---|---|---|---|
| | Coincide con cualquier elemento separado por el carácter vertical (|). | th(e|is|at) | En "this is the day. " coincidir con "the" y "this" |
(?( expression )yes | no ) | Coincidir si el patrón de expresión regular se especifica por expression yes; de lo contrario, coincidir con lo opcional no Parte. expression se interpreta como una afirmación de anchura cero. | (?(A)A\d{2}\b|\b\d{3}\b) | "A10 C103 910" dentro de "10" y "910" |
(?( name )yes | no ) | Coincidir si el nombre o el grupo capturado nombrado o numerado tiene una coincidencia yes; de lo contrario, coincidir con lo opcional no. | (?< quoted>")?(?(quoted).+?"|\S+\s) | "Dogs.jpg "Yiska playing.jpg"" con Dogs.jpg y "Yiska playing.jpg" |
El reemplazo es la expresión regular utilizada en el patrón de reemplazo.
La siguiente tabla enumera los caracteres utilizados para el reemplazo:
Carácter | Descripción | Patrón | Patrón de reemplazo | Cadena de entrada | Cadena de resultado |
---|---|---|---|---|---|
$number | Reemplazar por grupo number Subcadena coincidente. | \b(\w+)(\s)(\w+)\b | $3$2$1 | "uno dos" | "dos uno" |
${name} | Reemplazar por grupo nombrado name Subcadena coincidente. | \b(?< word1>\w+)(\s)(?< word2>\w+)\b | ${word2} ${word1} | "uno dos" | "dos uno" |
$$ | Reemplazar el carácter "$". | \b(\d+)\s?USD | $$$1 | "103 USD" | "$103" |
$& | Reemplazar una copia de todo el elemento coincidente. | (\$*(\d*(\.+\d+)?){1) | **$& | "$1.30" | "**$1.30**" |
$` | Reemplazar todo el texto de la entrada antes de la coincidencia. | B+ | $` | "AABBCC" | "AAAACC" |
$' | Reemplazar todo el texto coincidente con la entrada. | B+ | $' | "AABBCC" | "AACCCC" |
$+ | Reemplazar el último grupo capturado. | B+(C+) | $+ | "AABBCCDD" | AACCDD |
$_ | Reemplazar toda la cadena de entrada. | B+ | $_ | "AABBCC" | "AAAABBCCCC" |
La siguiente tabla enumera varios constructores misceláneos:
Construcción | Descripción | ejemplo |
---|---|---|
(?imnsx-imnsx) | Configurar o desactivar opciones como la insensibilidad a mayúsculas y minúsculas en el medio del patrón. | \bA(?i)b\w+\b Coincide con "ABA Able Act" y "ABA" y "Able" |
(?#comentarios) | Comentarios en línea. Este comentario termina en el primer paréntesis derecho. | \bA(?#匹配以A开头的单词)\w+\b |
# #}} | [final de línea] | El comentario comienza con un # no escapado y se extiende hasta el final de la línea.+(?x)\bA\w |
Clase Regex
La clase Regex se utiliza para representar una expresión regular.
Núm. orden | Método & Descripción |
---|---|
1 | public bool IsMatch(
string input
) Indica si la expresión regular especificada se encuentra en la cadena de entrada especificada. |
2 | public bool IsMatch(
string input,
int startat
) Indica si la expresión regular especificada se encuentra en la cadena de entrada especificada, comenzando desde la posición especificada en la cadena. |
3 | public static bool IsMatch(
string input,
string pattern
) Indica si la expresión regular especificada se encuentra en la cadena de entrada especificada. |
4 | public MatchCollection Matches(
string input
) Búsca todas las coincidencias de la expresión regular en la cadena de entrada especificada. |
5 | public string Replace(
string input,
string replacement
) Reemplaza todas las coincidencias de la expresión regular en la cadena de entrada especificada con la cadena de reemplazo especificada. |
6 | public string[] Split(
string input
) Divide la cadena de entrada en un array de subcadenas, según la posición definida por el patrón de expresión regular especificado en el constructor de Regex. |
Para obtener una lista completa de propiedades de la clase Regex, consulte el documento de C# de Microsoft.
El siguiente ejemplo coincide con las palabras que comienzan con 'S':
Cuando el código anterior se compila y ejecuta, producirá el siguiente resultado:
Coincidencias de palabras que comienzan con 'S': La Expresión: \bS\S* Splendid Suns
A continuación se muestra un ejemplo de coincidencia de palabras que comienzan con 'm' y terminan con 'e':
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { private static void mostrarCoincidencia(string text, string expr) { Console.WriteLine("La Expresión: " + expr); MatchCollection mc = Regex.Matches(text, expr); foreach (Match m in mc) { Console.WriteLine(m); } } static void Main(string[] args) { string str = "hacer laberinto y administrar para medirlo"; Console.WriteLine("Coincidencias de palabras que comienzan con 'm' y terminan con 'e':"); mostrarCoincidencia(str, @"\bm\S*e\b"); Console.ReadKey(); } } }
Cuando el código anterior se compila y ejecuta, producirá el siguiente resultado:
Coincidencias de palabras que comienzan con 'm' y terminan con 'e': La Expresión: \bm\S*e\b hacer laberinto administrar medir
A continuación se muestra un ejemplo de reemplazo de espacios en blanco adicionales:
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { static void Main(string[] args) { string input = "Hello World "; string pattern = "\\s"+"; string replacement = " "; Regex rgx = new Regex(pattern); string result = rgx.Replace(input, replacement); Console.WriteLine("Cadena original: {0}", input) Console.WriteLine("Cadena de sustitución: {0}", result); Console.ReadKey(); } } }
Cuando el código anterior se compila y ejecuta, producirá el siguiente resultado:
Cadena original: Hello World Cadena de sustitución: Hello World