Clases de caracteres en expresiones regulares
Una clase de caracteres define un conjunto de caracteres, cualquiera de los cuales puede estar en una cadena de entrada para que se produzca una coincidencia. El lenguaje de expresiones regulares de .NET admite las siguientes clases de caracteres:
Grupos de caracteres positivos. Un carácter de la cadena de entrada debe coincidir con uno de los caracteres del conjunto especificado. Para obtener más información, consulte Grupo de caracteres positivos.
Grupos de caracteres negativos. Ningún carácter de la cadena de entrada debe coincidir con ninguno de los caracteres del conjunto especificado. Para obtener más información, consulte Grupo de caracteres negativos.
Cualquier carácter. El carácter
.
(punto) en una expresión regular es un carácter comodín que coincide con cualquier carácter excepto con\n
. Para obtener más información, consulte Cualquier carácter.Una categoría general o un bloque con nombre Unicode. Para que se produzca una coincidencia, un carácter de la cadena de entrada debe ser miembro de una categoría Unicode determinada o debe estar dentro de un intervalo contiguo de caracteres Unicode. Para obtener más información, consulte Categoría Unicode o bloque Unicode.
Un bloque con nombre o una categoría general negativa Unicode. Para que se produzca una coincidencia, un carácter de la cadena de entrada no debe ser miembro de una categoría Unicode determinada o no debe estar dentro de un intervalo contiguo de caracteres Unicode. Para obtener más información, consulte Categoría Unicode o bloque Unicode negativo.
Un carácter de palabra. Un carácter de la cadena de entrada puede pertenecer a cualquiera de las categorías Unicode que son adecuadas para los caracteres que se usan para formar palabras. Para obtener más información, consulte Carácter de palabra.
Un carácter que no se usa en las palabras. Un carácter de la cadena de entrada puede pertenecer a cualquier categoría Unicode que no se usa para formar palabras. Para obtener más información, consulte Carácter que no se usa en las palabras.
Un carácter de espacio en blanco. Un carácter de la cadena de entrada puede ser cualquiera de los caracteres separadores Unicode, así como cualquiera de los caracteres de una serie de caracteres de control. Para obtener más información, consulte Carácter de espacio en blanco.
Un carácter que no sea un espacio en blanco. Un carácter de la cadena de entrada puede ser cualquier carácter que no sea un espacio en blanco. Para obtener más información, consulte Carácter que no sea un espacio en blanco.
Un dígito decimal. Un carácter de la cadena de entrada puede ser cualquiera de los caracteres clasificados como dígitos decimales de Unicode. Para obtener más información, consulte Carácter de dígito decimal.
Un carácter que no sea un dígito decimal. Un carácter de la cadena de entrada puede ser cualquier carácter que no sea un dígito decimal de Unicode. Para obtener más información, consulte Carácter de dígito decimal.
.NET admite expresiones de sustracción de clases de caracteres, que permiten definir un conjunto de caracteres como el resultado de excluir una clase de caracteres de otra clase de caracteres. Para obtener más información, consulte Sustracción de clases de caracteres.
Nota
Las clases que coinciden con los caracteres por categoría, como \w para que coincidan con caracteres alfabéticos o \p{} para que coincidan con una categoría Unicode, que se basan en la clase CharUnicodeInfo para proporcionar información sobre las categorías de caracteres. En .NET Framework 4.6.2 y versiones posteriores, las categorías de caracteres se basan en el estándar Unicode, versión 8.0.0.
Grupo de caracteres positivos: [ ]
Un grupo de caracteres positivos especifica una lista de caracteres cualquiera de los cuales puede aparecer en una cadena de entrada para que se produzca una coincidencia. Los caracteres de la lista se pueden especificar individualmente, como un intervalo o de ambas formas.
La sintaxis para especificar la lista de caracteres individuales es la siguiente:
[*character_group*]
donde grupo_caracteres es una lista de cada uno de los caracteres que pueden aparecer en la cadena de entrada para que se produzca una coincidencia. grupo_caracteres puede estar formado por cualquier combinación de uno o varios caracteres literales, caracteres de escape o clases de caracteres.
La sintaxis para especificar un intervalo de caracteres es la siguiente:
[firstCharacter-lastCharacter]
donde firstCharacter es el carácter que comienza el intervalo y lastCharacter es el carácter final del intervalo. Un intervalo de caracteres es una serie contigua de caracteres que se define especificando el primer carácter de la serie, un guion (-) y, a continuación, el último carácter de la serie. Dos caracteres son contiguos si tienen puntos de código Unicode adyacentes. firstCharacter debe ser el carácter con el punto de código inferior y lastCharacter debe ser el carácter con el punto de código superior.
Nota
Dado que un grupo de caracteres positivos puede incluir un conjunto de caracteres y un rango de caracteres, un carácter de guión (-
) siempre se interpreta como el separador de rango, a menos que sea el primer carácter del grupo o el último.
Para incluir un guión como miembro no periférico de un grupo de caracteres, escape de él. Por ejemplo, para crear un grupo de caracteres para el carácter a
y los caracteres de -
a /
, la sintaxis correcta es [a\--/]
.
En la tabla siguiente se recogen algunos de los patrones de expresiones regulares comunes que contienen clases de caracteres positivos.
Patrón | Descripción |
---|---|
[aeiou] |
Coincide con todas las vocales. |
[\p{P}\d] |
Coincide con todos los caracteres de puntuación y de dígitos decimales. |
[\s\p{P}] |
Coincide con todos los caracteres de espacio en blanco y de puntuación. |
En el ejemplo siguiente se define un grupo de caracteres positivos que contiene los caracteres "a" y "e" de manera que la cadena de entrada deba contener las palabras "grey" o "gray" seguidas de cualquier otra palabra para que se produzca una coincidencia.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"gr[ae]y\s\S+?[\s\p{P}]";
string input = "The gray wolf jumped over the grey wall.";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
Console.WriteLine($"'{match.Value}'");
}
}
// The example displays the following output:
// 'gray wolf '
// 'grey wall.'
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "gr[ae]y\s\S+?[\s\p{P}]"
Dim input As String = "The gray wolf jumped over the grey wall."
Dim matches As MatchCollection = Regex.Matches(input, pattern)
For Each match As Match In matches
Console.WriteLine($"'{match.Value}'")
Next
End Sub
End Module
' The example displays the following output:
' 'gray wolf '
' 'grey wall.'
La expresión regular gr[ae]y\s\S+?[\s|\p{P}]
se define de la siguiente manera:
Patrón | Descripción |
---|---|
gr |
Coincide con los caracteres literales "gr". |
[ae] |
Coincide con una "a" o una "e". |
y\s |
Coincide con el carácter literal "y" seguido de un carácter de espacio en blanco. |
\S+? |
Coincide con uno o varios caracteres que no sean un espacio en blanco, pero con la menor cantidad posible de caracteres. |
[\s\p{P}] |
Coincide con un carácter de espacio en blanco o un signo de puntuación. |
En el ejemplo siguiente se buscan palabras que comienzan por cualquier letra mayúscula. Utiliza la subexpresión [A-Z]
para representar el intervalo de letras mayúsculas de la A a la Z.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b[A-Z]\w*\b";
string input = "A city Albany Zulu maritime Marseilles";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// A
// Albany
// Zulu
// Marseilles
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b[A-Z]\w*\b"
Dim input As String = "A city Albany Zulu maritime Marseilles"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
La expresión regular \b[A-Z]\w*\b
se define como se muestra en la tabla siguiente.
Modelo | Descripción |
---|---|
\b |
Empieza en un límite de palabras. |
[A-Z] |
Coincide con cualquier letra mayúscula de la A a la Z. |
\w* |
Buscar una coincidencia con cero o más caracteres alfabéticos. |
\b |
Coincide con un límite de palabras. |
Grupo de caracteres negativos: [^]
Un grupo de caracteres negativos especifica una lista de caracteres que no deben aparecer en una cadena de entrada para que se produzca una coincidencia. Los caracteres de la lista se pueden especificar individualmente, como un intervalo o de ambas formas.
La sintaxis para especificar la lista de caracteres individuales es la siguiente:
[*^character_group*]
donde grupo_caracteres es una lista de cada uno de los caracteres que no pueden aparecer en la cadena de entrada para que se produzca una coincidencia. grupo_caracteres puede estar formado por cualquier combinación de uno o varios caracteres literales, caracteres de escape o clases de caracteres.
La sintaxis para especificar un intervalo de caracteres es la siguiente:
[^*firstCharacter*-*lastCharacter*]
donde firstCharacter es el carácter que comienza el intervalo y lastCharacter es el carácter final del intervalo. Un intervalo de caracteres es una serie contigua de caracteres que se define especificando el primer carácter de la serie, un guion (-) y, a continuación, el último carácter de la serie. Dos caracteres son contiguos si tienen puntos de código Unicode adyacentes. firstCharacter debe ser el carácter con el punto de código inferior y lastCharacter debe ser el carácter con el punto de código superior.
Nota
Dado que un grupo de caracteres negativos puede incluir un conjunto de caracteres y un rango de caracteres, un carácter de guión (-
) siempre se interpreta como el separador de rango, a menos que sea el primer carácter del grupo o el último.
Es posible concatenar dos o más intervalos de caracteres. Por ejemplo, para especificar el intervalo de dígitos decimales del "0" al "9", el intervalo de letras minúsculas de la "a" a la "f" y el intervalo de letras mayúsculas de la "A" a la "F", utilice [0-9a-fA-F]
.
El carácter inicial de acento circunflejo (^
) de un grupo de caracteres negativos es obligatorio e indica que el grupo de caracteres es un grupo de caracteres negativos en lugar de un grupo de caracteres positivos.
Importante
Un grupo de caracteres negativos dentro de un patrón de expresión regular más grande no es una aserción de ancho cero. Es decir, después de evaluar el grupo de caracteres negativos, el motor de expresiones regulares avanza un carácter en la cadena de entrada.
En la tabla siguiente se recogen algunos de los patrones de expresiones regulares comunes que contienen grupos de caracteres negativos.
Patrón | Descripción |
---|---|
[^aeiou] |
Coincide con todos los caracteres excepto las vocales. |
[^\p{P}\d] |
Coincide con todos los caracteres excepto los caracteres de puntuación y de dígitos decimales. |
En el ejemplo siguiente se busca cualquier palabra que comience por los caracteres "th" y no vaya seguida de una "o".
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\bth[^o]\w+\b";
string input = "thought thing though them through thus thorough this";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// thing
// them
// through
// thus
// this
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\bth[^o]\w+\b"
Dim input As String = "thought thing though them through thus " + _
"thorough this"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' thing
' them
' through
' thus
' this
La expresión regular \bth[^o]\w+\b
se define como se muestra en la tabla siguiente.
Modelo | Descripción |
---|---|
\b |
Empieza en un límite de palabras. |
th |
Coincide con los caracteres literales "th". |
[^o] |
Coincide con cualquier carácter que no sea una "o". |
\w+ |
Buscar coincidencias con uno o más caracteres alfabéticos. |
\b |
Finaliza en un límite de palabras. |
Cualquier carácter: .
El carácter de punto (.) coincide con cualquier carácter excepto con \n
(el carácter de nueva línea), con los dos requisitos siguientes:
Si la opción RegexOptions.Singleline modifica un patrón de expresión regular o si la opción
.
modifica la parte del patrón que contiene la clase de caracteress
,.
coincide con cualquier carácter. Para obtener más información, consulte Opciones de expresiones regulares.El ejemplo siguiente muestra el comportamiento predeterminado de la clase de caracteres
.
y con la opción RegexOptions.Singleline. La expresión regular^.+
comienza en el principio de la cadena y coincide con todos los caracteres. De manera predeterminada, la coincidencia termina al final de la primera línea; el patrón de expresión regular coincide con el carácter de retorno de carro,\r
, pero no coincide con\n
. Dado que la opción RegexOptions.Singleline interpreta la cadena de entrada completa como una sola línea, coincide con cada carácter de la cadena de entrada, incluido\n
.using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = "^.+"; string input = "This is one line and" + Environment.NewLine + "this is the second."; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(Regex.Escape(match.Value)); Console.WriteLine(); foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Singleline)) Console.WriteLine(Regex.Escape(match.Value)); } } // The example displays the following output: // This\ is\ one\ line\ and\r // // This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
Imports System.Text.RegularExpressions Module Example Public Sub Main() Dim pattern As String = "^.+" Dim input As String = "This is one line and" + vbCrLf + "this is the second." For Each match As Match In Regex.Matches(input, pattern) Console.WriteLine(Regex.Escape(match.Value)) Next Console.WriteLine() For Each match As Match In Regex.Matches(input, pattern, RegexOptions.SingleLine) Console.WriteLine(Regex.Escape(match.Value)) Next End Sub End Module ' The example displays the following output: ' This\ is\ one\ line\ and\r ' ' This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
Nota
Como coincide con cualquier carácter excepto con \n
, la clase de caracteres .
también coincide con \r
(el carácter de retorno de carro).
En un grupo de caracteres positivos o negativos, un punto se considera un carácter de punto literal, no una clase de caracteres. Para más información, consulte las secciones Grupo de caracteres positivos y Grupo de caracteres negativos anteriormente en este tema. En el ejemplo siguiente se define una expresión regular que incluye el carácter de punto (
.
) como una clase de caracteres y como un miembro de un grupo de caracteres positivos. La expresión regular\b.*[.?!;:](\s|\z)
comienza en un límite de palabras, coincide con cualquier carácter hasta que encuentra uno de cinco signos de puntuación, incluido el punto, y después coincide con un carácter de espacio en blanco o con el final de la cadena.using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = @"\b.*[.?!;:](\s|\z)"; string input = "this. what: is? go, thing."; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } } // The example displays the following output: // this. what: is? go, thing.
Imports System.Text.RegularExpressions Module Example Public Sub Main() Dim pattern As STring = "\b.*[.?!;:](\s|\z)" Dim input As String = "this. what: is? go, thing." For Each match As Match In Regex.Matches(input, pattern) Console.WriteLine(match.Value) Next End Sub End Module ' The example displays the following output: ' this. what: is? go, thing.
Nota
Dado que coincide con cualquier carácter, el elemento del lenguaje .
se utiliza a menudo con un cuantificador no expansivo si un patrón de expresión regular intenta coincidir varias veces con cualquier carácter. Para obtener más información, consulte Cuantificadores.
Categoría Unicode o bloque Unicode: \p{}
El estándar Unicode asigna una categoría general a cada carácter. Por ejemplo, un carácter concreto puede ser una letra mayúscula (representada por la categoría Lu
), un dígito decimal (categoría Nd
), un símbolo matemático (categoría Sm
) o un separador de párrafos (categoría Zl
). Determinados juegos de caracteres del estándar Unicode también ocupan un intervalo o bloque específico de puntos de código consecutivos. Por ejemplo, el juego de caracteres latinos básico se encuentra desde \u0000 hasta \u007F, mientras que el juego de caracteres árabes se encuentra desde \u0600 hasta \u06FF.
La construcción de expresión regular
\p{
nombre }
coincide con cualquier carácter que pertenezca a una categoría general o bloque con nombre de Unicode, donde nombre es la abreviatura de la categoría o el nombre del bloque con nombre. Para obtener una lista de abreviaturas de categorías, consulte la sección Categorías generales Unicode compatibles más adelante en este tema. Para obtener una lista de bloques con nombre, consulte la sección Bloques con nombre compatibles más adelante en este tema.
Sugerencia
La coincidencia se puede mejorar si la cadena se normaliza por primera vez llamando al método String.Normalize.
En el ejemplo siguiente se usa la construcción \p{
nombre}
para buscar coincidencias con una categoría general de Unicode (en este caso, Pd
o Punctuation, Dash) y un bloque con nombre (los bloques con nombre IsGreek
e IsBasicLatin
).
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+";
string input = "Κατα Μαθθαίον - The Gospel of Matthew";
Console.WriteLine(Regex.IsMatch(input, pattern)); // Displays True.
}
}
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+"
Dim input As String = "Κατα Μαθθαίον - The Gospel of Matthew"
Console.WriteLine(Regex.IsMatch(input, pattern)) ' Displays True.
End Sub
End Module
La expresión regular \b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+
se define como se muestra en la tabla siguiente.
Modelo | Descripción |
---|---|
\b |
Empieza en un límite de palabras. |
\p{IsGreek}+ |
Coincide con uno o varios caracteres griegos. |
(\s)? |
Busca coincidencias con cero o un carácter de espacio en blanco. |
(\p{IsGreek}+(\s)?)+ |
Coincide una o varias veces con el patrón de uno o varios caracteres griegos seguidos de cero o un carácter de espacio en blanco. |
\p{Pd} |
Coincide con un carácter de puntuación, guion. |
\s |
Coincide con un carácter de espacio en blanco. |
\p{IsBasicLatin}+ |
Coincide con uno o varios caracteres latinos básicos. |
(\s)? |
Busca coincidencias con cero o un carácter de espacio en blanco. |
(\p{IsBasicLatin}+(\s)?)+ |
Coincide una o varias veces con el patrón de uno varios caracteres latinos básicos seguidos de cero o un carácter de espacio en blanco. |
Categoría Unicode o bloque Unicode negativo: \P{}
El estándar Unicode asigna una categoría general a cada carácter. Por ejemplo, un carácter concreto puede ser una letra mayúscula (representada por la categoría Lu
), un dígito decimal (categoría Nd
), un símbolo matemático (categoría Sm
) o un separador de párrafos (categoría Zl
). Determinados juegos de caracteres del estándar Unicode también ocupan un intervalo o bloque específico de puntos de código consecutivos. Por ejemplo, el juego de caracteres latinos básico se encuentra desde \u0000 hasta \u007F, mientras que el juego de caracteres árabes se encuentra desde \u0600 hasta \u06FF.
La construcción de expresión regular
\P{
nombre }
coincide con cualquier carácter que no pertenezca a una categoría general o bloque con nombre de Unicode, donde nombre es la abreviatura de la categoría o el nombre del bloque con nombre. Para obtener una lista de abreviaturas de categorías, consulte la sección Categorías generales Unicode compatibles más adelante en este tema. Para obtener una lista de bloques con nombre, consulte la sección Bloques con nombre compatibles más adelante en este tema.
Sugerencia
La coincidencia se puede mejorar si la cadena se normaliza por primera vez llamando al método String.Normalize.
En el siguiente ejemplo se usa la construcción \P{
nombre}
para quitar cualquier símbolo de divisa (en este caso, la categoría Sc
, o Symbol, Currency) de las cadenas numéricas.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\P{Sc})+";
string[] values = { "$164,091.78", "£1,073,142.68", "73¢", "€120" };
foreach (string value in values)
Console.WriteLine(Regex.Match(value, pattern).Value);
}
}
// The example displays the following output:
// 164,091.78
// 1,073,142.68
// 73
// 120
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\P{Sc})+"
Dim values() As String = {"$164,091.78", "£1,073,142.68", "73¢", "€120"}
For Each value As String In values
Console.WriteLine(Regex.Match(value, pattern).Value)
Next
End Sub
End Module
' The example displays the following output:
' 164,091.78
' 1,073,142.68
' 73
' 120
El patrón de expresión regular (\P{Sc})+
coincide con uno o varios caracteres que no son símbolos de divisa; quita eficazmente cualquier símbolo de divisa de la cadena de resultado.
Carácter de palabra: \w
\w
coincide con cualquier carácter de palabra. Un carácter de palabra es un miembro de alguna de las categorías Unicode enumeradas en la tabla siguiente.
Category | Descripción |
---|---|
Ll | Letra, minúscula |
Lu | Letra, mayúscula |
Lt | Letra, inicial en mayúscula |
Lo | Letra, otra |
Lm | Letra, modificador |
Mn | Marca, sin espacios |
Nd | Número, dígito decimal |
Pc | Puntuación, Conector Esta categoría incluye diez caracteres, el más usado de los cuales es el carácter LOWLINE (_), u+005F. |
Si se especifica un comportamiento conforme a ECMAScript, \w
es equivalente a [a-zA-Z_0-9]
. Para obtener información sobre las expresiones regulares ECMAScript, consulte la sección "Comportamiento de la búsqueda de coincidencias de ECMAScript" en Opciones de expresiones regulares.
Nota
Dado que coincide con cualquier carácter de palabra, el elemento del lenguaje \w
se suele usar con un cuantificador diferido si un patrón de expresión regular intenta coincidir varias veces con cualquier carácter de palabra, seguido de un carácter de palabra específico. Para obtener más información, consulte Cuantificadores.
En el ejemplo siguiente se usa el elemento del lenguaje \w
para buscar coincidencias de caracteres duplicados en una palabra. El ejemplo define un patrón de expresión regular, (\w)\1
, que se puede interpretar de la siguiente manera.
Elemento | Descripción |
---|---|
(\w) | Coincide con un carácter de palabra. Este es el primer grupo de captura. |
\1 | Coincide con el valor de la primera captura. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\w)\1";
string[] words = { "trellis", "seer", "latter", "summer",
"hoarse", "lesser", "aardvark", "stunned" };
foreach (string word in words)
{
Match match = Regex.Match(word, pattern);
if (match.Success)
Console.WriteLine("'{0}' found in '{1}' at position {2}.",
match.Value, word, match.Index);
else
Console.WriteLine("No double characters in '{0}'.", word);
}
}
}
// The example displays the following output:
// 'll' found in 'trellis' at position 3.
// 'ee' found in 'seer' at position 1.
// 'tt' found in 'latter' at position 2.
// 'mm' found in 'summer' at position 2.
// No double characters in 'hoarse'.
// 'ss' found in 'lesser' at position 2.
// 'aa' found in 'aardvark' at position 0.
// 'nn' found in 'stunned' at position 3.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\w)\1"
Dim words() As String = {"trellis", "seer", "latter", "summer", _
"hoarse", "lesser", "aardvark", "stunned"}
For Each word As String In words
Dim match As Match = Regex.Match(word, pattern)
If match.Success Then
Console.WriteLine("'{0}' found in '{1}' at position {2}.", _
match.Value, word, match.Index)
Else
Console.WriteLine("No double characters in '{0}'.", word)
End If
Next
End Sub
End Module
' The example displays the following output:
' 'll' found in 'trellis' at position 3.
' 'ee' found in 'seer' at position 1.
' 'tt' found in 'latter' at position 2.
' 'mm' found in 'summer' at position 2.
' No double characters in 'hoarse'.
' 'ss' found in 'lesser' at position 2.
' 'aa' found in 'aardvark' at position 0.
' 'nn' found in 'stunned' at position 3.
Carácter que no se usa para formar palabras: \W
\W
coincide con cualquier carácter que no sea de palabra. El elemento del lenguaje \W es equivalente a la clase de caracteres siguiente:
[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]
En otras palabras, coincide con cualquier carácter excepto con los que figuran en las categorías Unicode de la tabla siguiente.
Category | Descripción |
---|---|
Ll | Letra, minúscula |
Lu | Letra, mayúscula |
Lt | Letra, inicial en mayúscula |
Lo | Letra, otra |
Lm | Letra, modificador |
Mn | Marca, sin espacios |
Nd | Número, dígito decimal |
Pc | Puntuación, Conector Esta categoría incluye diez caracteres, el más usado de los cuales es el carácter LOWLINE (_), u+005F. |
Si se especifica un comportamiento conforme a ECMAScript, \W
es equivalente a [^a-zA-Z_0-9]
. Para obtener información sobre las expresiones regulares ECMAScript, consulte la sección "Comportamiento de la búsqueda de coincidencias de ECMAScript" en Opciones de expresiones regulares.
Nota
Dado que coincide con cualquier carácter que no sea de palabra, el elemento del lenguaje \W
se suele usar con un cuantificador diferido si un patrón de expresión regular intenta coincidir varias veces con cualquier carácter que no sea de palabra, seguido de un carácter que no sea de palabra específico. Para obtener más información, consulte Cuantificadores.
En el ejemplo siguiente se ilustra la clase de caracteres \W
. Define un patrón de expresión regular, \b(\w+)(\W){1,2}
, que coincide con una palabra seguida de uno o dos caracteres que no son de palabra, como un espacio en blanco o un signo de puntuación. La expresión regular se interpreta como se muestra en la tabla siguiente.
Elemento | Descripción |
---|---|
\b | Iniciar la búsqueda de coincidencias en un límite de palabras. |
(\w+) | Buscar coincidencias con uno o más caracteres alfabéticos. Este es el primer grupo de captura. |
(\W){1,2} | Coincide una o dos veces con un carácter que no se usa para formar palabras. Este es el segundo grupo de captura. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\w+)(\W){1,2}";
string input = "The old, grey mare slowly walked across the narrow, green pasture.";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine(match.Value);
Console.Write(" Non-word character(s):");
CaptureCollection captures = match.Groups[2].Captures;
for (int ctr = 0; ctr < captures.Count; ctr++)
Console.Write(@"'{0}' (\u{1}){2}", captures[ctr].Value,
Convert.ToUInt16(captures[ctr].Value[0]).ToString("X4"),
ctr < captures.Count - 1 ? ", " : "");
Console.WriteLine();
}
}
}
// The example displays the following output:
// The
// Non-word character(s):' ' (\u0020)
// old,
// Non-word character(s):',' (\u002C), ' ' (\u0020)
// grey
// Non-word character(s):' ' (\u0020)
// mare
// Non-word character(s):' ' (\u0020)
// slowly
// Non-word character(s):' ' (\u0020)
// walked
// Non-word character(s):' ' (\u0020)
// across
// Non-word character(s):' ' (\u0020)
// the
// Non-word character(s):' ' (\u0020)
// narrow,
// Non-word character(s):',' (\u002C), ' ' (\u0020)
// green
// Non-word character(s):' ' (\u0020)
// pasture.
// Non-word character(s):'.' (\u002E)
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\w+)(\W){1,2}"
Dim input As String = "The old, grey mare slowly walked across the narrow, green pasture."
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Console.Write(" Non-word character(s):")
Dim captures As CaptureCollection = match.Groups(2).Captures
For ctr As Integer = 0 To captures.Count - 1
Console.Write("'{0}' (\u{1}){2}", captures(ctr).Value, _
Convert.ToUInt16(captures(ctr).Value.Chars(0)).ToString("X4"), _
If(ctr < captures.Count - 1, ", ", ""))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' The
' Non-word character(s):' ' (\u0020)
' old,
' Non-word character(s):',' (\u002C), ' ' (\u0020)
' grey
' Non-word character(s):' ' (\u0020)
' mare
' Non-word character(s):' ' (\u0020)
' slowly
' Non-word character(s):' ' (\u0020)
' walked
' Non-word character(s):' ' (\u0020)
' across
' Non-word character(s):' ' (\u0020)
' the
' Non-word character(s):' ' (\u0020)
' narrow,
' Non-word character(s):',' (\u002C), ' ' (\u0020)
' green
' Non-word character(s):' ' (\u0020)
' pasture.
' Non-word character(s):'.' (\u002E)
Dado que el objeto Group del segundo grupo de captura contiene solo un carácter que no se usa para formar palabras, el ejemplo recupera todos los caracteres que no se usan para formar palabras capturados del objeto CaptureCollection que devuelve la propiedad Group.Captures.
Carácter de espacio en blanco: \s
\s
coincide con cualquier carácter de espacio en blanco. Equivale a las secuencias de escape y las categorías Unicode que figuran en la tabla siguiente.
Category | Descripción |
---|---|
\f |
El carácter de avance de página, \u000C. |
\n |
El carácter de nueva línea, \u000A. |
\r |
El carácter de retorno de carro, \u000D. |
\t |
El carácter de tabulación, \u0009. |
\v |
El carácter de tabulación vertical, \u000B. |
\x85 |
El carácter de LÍNEA SIGUIENTE, \u0085. |
\p{Z} |
Coincide con todos los caracteres separadores. Esto incluye las categorías Zs , Zl y Zp . |
Si se especifica un comportamiento conforme a ECMAScript, \s
es equivalente a [ \f\n\r\t\v]
. Para obtener información sobre las expresiones regulares ECMAScript, consulte la sección "Comportamiento de la búsqueda de coincidencias de ECMAScript" en Opciones de expresiones regulares.
En el ejemplo siguiente se ilustra la clase de caracteres \s
. Define un patrón de expresión regular, \b\w+(e)?s(\s|$)
, que coincide con una palabra que termina por "s" o "es" seguida de un carácter de espacio en blanco o el final de la cadena de entrada. La expresión regular se interpreta como se muestra en la tabla siguiente.
Elemento | Descripción |
---|---|
\b | Iniciar la búsqueda de coincidencias en un límite de palabras. |
\w+ | Buscar coincidencias con uno o más caracteres alfabéticos. |
(e)? | Coincide cero o una vez con una "e". |
s | Coincide con una "s". |
(\s|$) | Coincide con un carácter de espacio en blanco o el final de la cadena de entrada. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b\w+(e)?s(\s|$)";
string input = "matches stores stops leave leaves";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// matches
// stores
// stops
// leaves
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b\w+(e)?s(\s|$)"
Dim input As String = "matches stores stops leave leaves"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' matches
' stores
' stops
' leaves
Carácter que no sea un espacio en blanco: \S
\S
coincide con cualquier carácter que no sea un espacio en blanco. Equivale al patrón de expresión regular [^\f\n\r\t\v\x85\p{Z}]
o es lo contrario del patrón de expresión regular equivalente a \s
, que coincide con los caracteres de espacio en blanco. Para más información, consulte Carácter de espacio en blanco: \s.
Si se especifica un comportamiento conforme a ECMAScript, \S
es equivalente a [^ \f\n\r\t\v]
. Para obtener información sobre las expresiones regulares ECMAScript, consulte la sección "Comportamiento de la búsqueda de coincidencias de ECMAScript" en Opciones de expresiones regulares.
En el ejemplo siguiente se ilustra el elemento del lenguaje \S
. El patrón de expresión regular \b(\S+)\s?
coincide con cadenas delimitadas por caracteres de espacio en blanco. El segundo elemento del objeto GroupCollection de la coincidencia contiene la cadena coincidente. La expresión regular puede interpretarse como se muestra en la tabla siguiente.
Elemento | Descripción |
---|---|
\b |
Iniciar la búsqueda de coincidencias en un límite de palabras. |
(\S+) |
Coincide con caracteres que no son espacio en blanco. Este es el primer grupo de captura. |
\s? |
Busca coincidencias con cero o un carácter de espacio en blanco. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\S+)\s?";
string input = "This is the first sentence of the first paragraph. " +
"This is the second sentence.\n" +
"This is the only sentence of the second paragraph.";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Groups[1]);
}
}
// The example displays the following output:
// This
// is
// the
// first
// sentence
// of
// the
// first
// paragraph.
// This
// is
// the
// second
// sentence.
// This
// is
// the
// only
// sentence
// of
// the
// second
// paragraph.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\S+)\s?"
Dim input As String = "This is the first sentence of the first paragraph. " + _
"This is the second sentence." + vbCrLf + _
"This is the only sentence of the second paragraph."
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Groups(1))
Next
End Sub
End Module
' The example displays the following output:
' This
' is
' the
' first
' sentence
' of
' the
' first
' paragraph.
' This
' is
' the
' second
' sentence.
' This
' is
' the
' only
' sentence
' of
' the
' second
' paragraph.
Carácter de dígito decimal: \d
\d
coincide con cualquier dígito decimal. Equivale al patrón de expresión regular \p{Nd}
, que incluye los dígitos decimales estándar 0-9 así como los dígitos decimales de varios juegos de caracteres.
Si se especifica un comportamiento conforme a ECMAScript, \d
es equivalente a [0-9]
. Para obtener información sobre las expresiones regulares ECMAScript, consulte la sección "Comportamiento de la búsqueda de coincidencias de ECMAScript" en Opciones de expresiones regulares.
En el ejemplo siguiente se ilustra el elemento del lenguaje \d
. Comprueba si una cadena de entrada representa un número de teléfono válido de los Estados Unidos y Canadá. El patrón de expresión regular ^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$
se define como se muestra en la tabla siguiente.
Elemento | Descripción |
---|---|
^ |
Iniciar la búsqueda de coincidencias con el principio de la cadena de entrada. |
\(? |
Coincide con cero o un carácter "(" literal. |
\d{3} |
Coincide con tres dígitos decimales. |
\)? |
Coincide con cero o un carácter ")" literal. |
[\s-] |
Coincide con un guion o un carácter de espacio en blanco. |
(\(?\d{3}\)?[\s-])? |
Coincide cero o una vez con un paréntesis de apertura opcional seguido de tres dígitos decimales, un paréntesis de cierre opcional y un carácter de espacio en blanco o un guion. Este es el primer grupo de captura. |
\d{3}-\d{4} |
Coincide con tres dígitos decimales seguidos de un guion y otros cuatro dígitos decimales. |
$ |
Coincide con el final de la cadena de entrada. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$";
string[] inputs = { "111 111-1111", "222-2222", "222 333-444",
"(212) 111-1111", "111-AB1-1111",
"212-111-1111", "01 999-9999" };
foreach (string input in inputs)
{
if (Regex.IsMatch(input, pattern))
Console.WriteLine(input + ": matched");
else
Console.WriteLine(input + ": match failed");
}
}
}
// The example displays the following output:
// 111 111-1111: matched
// 222-2222: matched
// 222 333-444: match failed
// (212) 111-1111: matched
// 111-AB1-1111: match failed
// 212-111-1111: matched
// 01 999-9999: match failed
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$"
Dim inputs() As String = {"111 111-1111", "222-2222", "222 333-444", _
"(212) 111-1111", "111-AB1-1111", _
"212-111-1111", "01 999-9999"}
For Each input As String In inputs
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(input + ": matched")
Else
Console.WriteLine(input + ": match failed")
End If
Next
End Sub
End Module
' The example displays the following output:
' 111 111-1111: matched
' 222-2222: matched
' 222 333-444: match failed
' (212) 111-1111: matched
' 111-AB1-1111: match failed
' 212-111-1111: matched
' 01 999-9999: match failed
Carácter que no sea un dígito: \D
\D
coincide con cualquier carácter que no sea un dígito. Equivale al patrón de expresión regular \P{Nd}
.
Si se especifica un comportamiento conforme a ECMAScript, \D
es equivalente a [^0-9]
. Para obtener información sobre las expresiones regulares ECMAScript, consulte la sección "Comportamiento de la búsqueda de coincidencias de ECMAScript" en Opciones de expresiones regulares.
En el ejemplo siguiente se muestra el elemento del lenguaje \D. Comprueba si una cadena, como un número de pieza, consta de la combinación adecuada de caracteres decimales y no decimales. El patrón de expresión regular ^\D\d{1,5}\D*$
se define como se muestra en la tabla siguiente.
Elemento | Descripción |
---|---|
^ |
Iniciar la búsqueda de coincidencias con el principio de la cadena de entrada. |
\D |
Coincide con un carácter que no sea un dígito. |
\d{1,5} |
Coincide con entre uno y cinco dígitos decimales. |
\D* |
Coincide con cero, uno o más caracteres no decimales. |
$ |
Coincide con el final de la cadena de entrada. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^\D\d{1,5}\D*$";
string[] inputs = { "A1039C", "AA0001", "C18A", "Y938518" };
foreach (string input in inputs)
{
if (Regex.IsMatch(input, pattern))
Console.WriteLine(input + ": matched");
else
Console.WriteLine(input + ": match failed");
}
}
}
// The example displays the following output:
// A1039C: matched
// AA0001: match failed
// C18A: matched
// Y938518: match failed
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^\D\d{1,5}\D*$"
Dim inputs() As String = {"A1039C", "AA0001", "C18A", "Y938518"}
For Each input As String In inputs
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(input + ": matched")
Else
Console.WriteLine(input + ": match failed")
End If
Next
End Sub
End Module
' The example displays the following output:
Categorías generales Unicode compatibles
Unicode define las categorías generales que se muestran en la tabla siguiente. Para más información, consulte las secciones sobre el "formato de archivo UCD" y los "valores de categorías generales" en la base de datos de caracteres Unicode, sección 5.7.1, tabla 12.
Category | Descripción |
---|---|
Lu |
Letra, mayúscula |
Ll |
Letra, minúscula |
Lt |
Letra, inicial en mayúscula |
Lm |
Letra, modificador |
Lo |
Letra, otra |
L |
Todos los caracteres de letras. Esto incluye los caracteres Lu , Ll , Lt , Lm y Lo . |
Mn |
Marca, sin espacios |
Mc |
Marca, con espacios y combinación |
Me |
Marca, inclusión |
M |
Todas las marcas combinadas. Esto incluye las categorías Mn , Mc y Me . |
Nd |
Número, dígito decimal |
Nl |
Número, letra |
No |
Número, otro |
N |
Todos los números. Esto incluye las categorías Nd , Nl y No . |
Pc |
Puntuación, conector |
Pd |
Puntuación, raya |
Ps |
Puntuación, abrir |
Pe |
Puntuación, cerrar |
Pi |
Puntuación, comilla de apertura (puede comportarse como Ps o Pe, en función del uso) |
Pf |
Puntuación, comilla de cierre (puede comportarse como Ps o Pe, en función del uso) |
Po |
Puntuación, otro |
P |
Todos los signos de puntuación. Esto incluye las categorías Pc , Pd , Ps , Pe , Pi , Pf y Po . |
Sm |
Símbolo, matemático |
Sc |
Símbolo, divisa |
Sk |
Símbolo, modificador |
So |
Símbolo, otro |
S |
Todos los símbolos. Esto incluye las categorías Sm , Sc , Sk y So . |
Zs |
Separador, espacio |
Zl |
Separador, línea |
Zp |
Separador, párrafo |
Z |
Todos los caracteres separadores. Esto incluye las categorías Zs , Zl y Zp . |
Cc |
Otro, control |
Cf |
Otro, formato |
Cs |
Otro, suplente |
Co |
Otro, uso privado |
Cn |
Otro, sin asignar o sin carácter |
C |
Todos los demás caracteres. Esto incluye las categorías Cc , Cf , Cs , Co y Cn . |
Puede determinar la categoría Unicode de cualquier carácter concreto pasando dicho carácter al método GetUnicodeCategory. En el ejemplo siguiente se utiliza el método GetUnicodeCategory para determinar la categoría de cada elemento de una matriz que contiene determinados caracteres latinos.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
char[] chars = { 'a', 'X', '8', ',', ' ', '\u0009', '!' };
foreach (char ch in chars)
Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()),
Char.GetUnicodeCategory(ch));
}
}
// The example displays the following output:
// 'a': LowercaseLetter
// 'X': UppercaseLetter
// '8': DecimalDigitNumber
// ',': OtherPunctuation
// '\ ': SpaceSeparator
// '\t': Control
// '!': OtherPunctuation
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim chars() As Char = {"a"c, "X"c, "8"c, ","c, " "c, ChrW(9), "!"c}
For Each ch As Char In chars
Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()), _
Char.GetUnicodeCategory(ch))
Next
End Sub
End Module
' The example displays the following output:
' 'a': LowercaseLetter
' 'X': UppercaseLetter
' '8': DecimalDigitNumber
' ',': OtherPunctuation
' '\ ': SpaceSeparator
' '\t': Control
' '!': OtherPunctuation
Bloques con nombre compatibles
.NET proporciona los bloques con nombre que se muestran en la tabla siguiente. El conjunto de bloques con nombre compatibles está basado en Unicode 4.0 y Perl 5.6. Para una expresión regular que usa bloques con nombre, consulte la sección Categoría Unicode o bloque Unicode: sección \p{}.
Intervalo de puntos de código | Nombre del bloque |
---|---|
0000 - 007F | IsBasicLatin |
0080 - 00FF | IsLatin-1Supplement |
0100 - 017F | IsLatinExtended-A |
0180 - 024F | IsLatinExtended-B |
0250 - 02AF | IsIPAExtensions |
02B0 - 02FF | IsSpacingModifierLetters |
0300 - 036F | IsCombiningDiacriticalMarks |
0370 - 03FF | IsGreek O bien IsGreekandCoptic |
0400 - 04FF | IsCyrillic |
0500 - 052F | IsCyrillicSupplement |
0530 - 058F | IsArmenian |
0590 - 05FF | IsHebrew |
0600 - 06FF | IsArabic |
0700 - 074F | IsSyriac |
0780 - 07BF | IsThaana |
0900 - 097F | IsDevanagari |
0980 - 09FF | IsBengali |
0A00 - 0A7F | IsGurmukhi |
0A80 - 0AFF | IsGujarati |
0B00 - 0B7F | IsOriya |
0B80 - 0BFF | IsTamil |
0C00 - 0C7F | IsTelugu |
0C80 - 0CFF | IsKannada |
0D00 - 0D7F | IsMalayalam |
0D80 - 0DFF | IsSinhala |
0E00 - 0E7F | IsThai |
0E80 - 0EFF | IsLao |
0F00 - 0FFF | IsTibetan |
1000 - 109F | IsMyanmar |
10A0 - 10FF | IsGeorgian |
1100 - 11FF | IsHangulJamo |
1200 - 137F | IsEthiopic |
13A0 - 13FF | IsCherokee |
1400 - 167F | IsUnifiedCanadianAboriginalSyllabics |
1680 - 169F | IsOgham |
16A0 - 16FF | IsRunic |
1700 - 171F | IsTagalog |
1720 - 173F | IsHanunoo |
1740 - 175F | IsBuhid |
1760 - 177F | IsTagbanwa |
1780 - 17FF | IsKhmer |
1800 - 18AF | IsMongolian |
1900 - 194F | IsLimbu |
1950 - 197F | IsTaiLe |
19E0 - 19FF | IsKhmerSymbols |
1D00 - 1D7F | IsPhoneticExtensions |
1E00 - 1EFF | IsLatinExtendedAdditional |
1F00 - 1FFF | IsGreekExtended |
2000 - 206F | IsGeneralPunctuation |
2070 - 209F | IsSuperscriptsandSubscripts |
20A0 - 20CF | IsCurrencySymbols |
20D0 - 20FF | IsCombiningDiacriticalMarksforSymbols O bien IsCombiningMarksforSymbols |
2100 - 214F | IsLetterlikeSymbols |
2150 - 218F | IsNumberForms |
2190 - 21FF | IsArrows |
2200 - 22FF | IsMathematicalOperators |
2300 - 23FF | IsMiscellaneousTechnical |
2400 - 243F | IsControlPictures |
2440 - 245F | IsOpticalCharacterRecognition |
2460 - 24FF | IsEnclosedAlphanumerics |
2500 - 257F | IsBoxDrawing |
2580 - 259F | IsBlockElements |
25A0 - 25FF | IsGeometricShapes |
2600 - 26FF | IsMiscellaneousSymbols |
2700 - 27BF | IsDingbats |
27C0 - 27EF | IsMiscellaneousMathematicalSymbols-A |
27F0 - 27FF | IsSupplementalArrows-A |
2800 - 28FF | IsBraillePatterns |
2900 - 297F | IsSupplementalArrows-B |
2980 - 29FF | IsMiscellaneousMathematicalSymbols-B |
2A00 - 2AFF | IsSupplementalMathematicalOperators |
2B00 - 2BFF | IsMiscellaneousSymbolsandArrows |
2E80 - 2EFF | IsCJKRadicalsSupplement |
2F00 - 2FDF | IsKangxiRadicals |
2FF0 - 2FFF | IsIdeographicDescriptionCharacters |
3000 - 303F | IsCJKSymbolsandPunctuation |
3040 - 309F | IsHiragana |
30A0 - 30FF | IsKatakana |
3100 - 312F | IsBopomofo |
3130 - 318F | IsHangulCompatibilityJamo |
3190 - 319F | IsKanbun |
31A0 - 31BF | IsBopomofoExtended |
31F0 - 31FF | IsKatakanaPhoneticExtensions |
3200 - 32FF | IsEnclosedCJKLettersandMonths |
3300 - 33FF | IsCJKCompatibility |
3400 - 4DBF | IsCJKUnifiedIdeographsExtensionA |
4DC0 - 4DFF | IsYijingHexagramSymbols |
4E00 - 9FFF | IsCJKUnifiedIdeographs |
A000 - A48F | IsYiSyllables |
A490 - A4CF | IsYiRadicals |
AC00 - D7AF | IsHangulSyllables |
D800 - DB7F | IsHighSurrogates |
DB80 - DBFF | IsHighPrivateUseSurrogates |
DC00 - DFFF | IsLowSurrogates |
E000 - F8FF | IsPrivateUse o IsPrivateUseArea |
F900 - FAFF | IsCJKCompatibilityIdeographs |
FB00 - FB4F | IsAlphabeticPresentationForms |
FB50 - FDFF | IsArabicPresentationForms-A |
FE00 - FE0F | IsVariationSelectors |
FE20 - FE2F | IsCombiningHalfMarks |
FE30 - FE4F | IsCJKCompatibilityForms |
FE50 - FE6F | IsSmallFormVariants |
FE70 - FEFF | IsArabicPresentationForms-B |
FF00 - FFEF | IsHalfwidthandFullwidthForms |
FFF0 - FFFF | IsSpecials |
Sustracción de clases de caracteres: [grupo_base - [grupo_excluido]]
Una clase de caracteres define un conjunto de caracteres. La sustracción de clases de caracteres genera un conjunto de caracteres que es el resultado de excluir los caracteres de una clase de caracteres de otra clase de caracteres.
Una expresión de sustracción de clases de caracteres tiene el formato siguiente:
[
base_group -[
excluded_group ]]
Los corchetes ([]
) y el guion (-
) son obligatorios. El grupo_base es un grupo de caracteres positivos o un grupo de caracteres negativos. El componente grupo_excluido es otro grupo de caracteres positivos o negativos, u otra expresión de sustracción de clases de caracteres (es decir, pueden anidarse expresiones de sustracción de clases de caracteres).
Por ejemplo, supongamos que tiene un grupo base formado por el intervalo de caracteres de "a" a "z". Para definir el conjunto de caracteres formado por el grupo base, salvo el carácter "m", utilice [a-z-[m]]
. Para definir el conjunto de caracteres formado por el grupo base, salvo el conjunto de caracteres "d", "j" y "p", utilice [a-z-[djp]]
. Para definir el conjunto de caracteres formado por el grupo base, salvo el intervalo de caracteres de "m" a "p", utilice [a-z-[m-p]]
.
Considere la expresión de sustracción de clases de caracteres anidada [a-z-[d-w-[m-o]]]
. La expresión se evalúa desde el intervalo de caracteres más profundo hacia el exterior. Primero, el intervalo de caracteres de "m" a "o" se resta del intervalo de caracteres de "d" a "w", lo que da como resultado el conjunto de caracteres de "d" a "l" y de "p" a "w". A continuación, ese conjunto se resta del intervalo de caracteres de "a" a "z", lo que da lugar al conjunto de caracteres [abcmnoxyz]
.
Puede utilizar cualquier clase de caracteres con la sustracción de clases de caracteres. Para definir el conjunto de caracteres formado por todos los caracteres Unicode desde \u0000 hasta \uFFFF, a excepción de los caracteres de espacio en blanco (\s
), los caracteres de la categoría general de puntuación (\p{P}
), los caracteres del bloque con nombre IsGreek
(\p{IsGreek}
) y el carácter de control Unicode NEXT LINE (\x85), use [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]]
.
Elija las clases de caracteres para que una expresión de sustracción de clases de caracteres produzca resultados satisfactorios. Evite el uso de expresiones que produzcan un conjunto vacío de caracteres, que no coincidan con nada, o expresiones equivalentes al grupo base original. Por ejemplo, el conjunto vacío es el resultado de la expresión [\p{IsBasicLatin}-[\x00-\x7F]]
, que resta todos los caracteres del intervalo de caracteres IsBasicLatin
de la categoría general IsBasicLatin
. Ocurre lo mismo con el grupo base original, que es el resultado de la expresión [a-z-[0-9]]
. Esto se debe a que el grupo base, que está formado por el intervalo de caracteres comprendido entre las letras de la "a" a la "z", no contiene ningún carácter del grupo excluido, que es el intervalo de caracteres formado por los dígitos decimales del "0" al "9".
En el ejemplo siguiente se define una expresión regular, ^[0-9-[2468]]+$
, que coincide con cero y con los dígitos impares de una cadena de entrada. La expresión regular se interpreta como se muestra en la tabla siguiente.
Elemento | Descripción |
---|---|
^ | Comienza la búsqueda de coincidencias al principio de la cadena de entrada. |
[0-9-[2468]]+ |
Coincide con una o varias apariciones de cualquier carácter del 0 al 9, salvo con el 2, 4, 6 y 8. En otras palabras, busca una o varias coincidencias con cero o un dígito impar. |
$ | Finalizar la búsqueda de coincidencias al final de la cadena de entrada. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string[] inputs = { "123", "13579753", "3557798", "335599901" };
string pattern = @"^[0-9-[2468]]+$";
foreach (string input in inputs)
{
Match match = Regex.Match(input, pattern);
if (match.Success)
Console.WriteLine(match.Value);
}
}
}
// The example displays the following output:
// 13579753
// 335599901
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim inputs() As String = {"123", "13579753", "3557798", "335599901"}
Dim pattern As String = "^[0-9-[2468]]+$"
For Each input As String In inputs
Dim match As Match = Regex.Match(input, pattern)
If match.Success Then Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' 13579753
' 335599901