Las expresiones regulares son expresiones que se utilizan para expresar patrones de cadena. Por ejemplo, cuando se [0 - 9]{4}
expresan 4 números, se puede considerar como un comodín complejo. Se utiliza principalmente para encontrar un determinado tipo de cadena en el texto.
1. Los elementos básicos de las expresiones regulares
En realidad, las expresiones regulares se utilizan para hacer coincidir patrones de cadenas en un formato determinado. Un patrón consta principalmente de tres elementos: posición, carácter y cuantificador (número de caracteres). P.ej:
^[0-9]{
4}
Entre ellos, ^
significa que se requiere que la cadena de caracteres aparezca al principio de la línea, [0-9]
significa que el número que se va a emparejar es un número, y {4}
significa que hay 4 caracteres numéricos, por ejemplo, puede coincidir con el carácter que aparece al principio de la línea 1998
, 2022
etc.
Consulte la tabla siguiente para obtener más detalles:
algunos ejemplos:
a..c
——Capaz de coincidir con “abbc
”, “aZZc
”, “a09c
”, etc.a..c$
——Capaz de hacer coincidir "abbc
", "aZZc
", "a09c
", etc., comenzando desde el final de una línea y haciendo coincidir hacia adelante[Bbw]ill
——Capaz de hacer coincidir "Bill
", "bill
", "will
"0[^23456]a
——Puede coincidir con "01a
", "07a
" y "0ba
", pero no con "02a
" o "05a
"(good|bad)day
—— Capaz de coincidir con "buenos días" y "malos días"a\(b\)
a(b)
——Capaz de coincidir con " ", el símbolo de barra invertida indica que los paréntesis no se tratan como un separador de grupo, sino como caracteres ordinarios.
Otros ejemplos:
a+b
——Combina uno o más caracteresa
seguidos de caracteresb
, por ejemplo, "ab
", "aab
" y "aaab
"ab+
- aa
seguido de una o másb
cadenas coinciden, puedeab
"abb
", "", "abbb
" y similares coincidir(ab)+
ab
—— Coincide con la cadena que aparece una vez o que se repite " ", para que pueda coincidir con "ab
", "abab
", "ababab
", etc.[0-9]{4}
—— Coincidir con cualquier 4 dígitos\([0-9]{3}\)-[0-9]{4}-[0-9]{4}
—— Coincidir con una(666)-6666-6666
forma similar de número de teléfono^.*$
—— Capaz de hacer coincidir toda la línea, porque.*
puede coincidir con cero o más caracteres,^
y se$
ubica al principio y al final de la línea y luego comienza a coincidir^Dav(e|id)
-Si "Dave" o "David" aparecen al principio de una línea, entonces haga coincidir.
2. Usa expresiones regulares para hacer coincidir patrones en el texto.
System.Text.RegularExpression.Regex
La clase proporciona una función de coincidencia de patrones basada en cadenas de texto. Hay dos métodos de construcción de uso común en Regex:
Regex();
Regex(string);
Con un string
parámetro de constructor del Regex
objeto creado se puede precompilar para que la velocidad de coincidencia de patrones posterior sea más rápida. Si desea determinar si coincide con una cadena, puede utilizar el IsMatch()
método. El método tiene static
la siguiente forma:
bool ok = Regex.IsMatch("[Bbw]ill", "My friend Bill will pay the bill");
También puede utilizar métodos de instancia:
Regex rx = new Regex("[Bbw]ill");
bool ok = rx.IsMatch("My firend Bill will pay the bill");
Si no solo juzga si coincide, sino que también obtiene otra información, como la ubicación de la coincidencia, o realiza varias coincidencias, puede utilizar el método del Regex
objeto Match()
.
Busque la coincidencia de expresión regular especificada en el constructor Regex en la cadena de entrada especificada:
public Match Match(string);
Busque coincidencias de expresión regular en la cadena de entrada a partir de la posición inicial especificada de la cadena de entrada:
public Match Match(string, int);
Busque coincidencias de la expresión regular proporcionada en el parámetro de patrón en la cadena de entrada especificada:
public static Match Match(string, string);
Match()
El método devuelve un Match
objeto, este objeto representa el resultado del proceso de coincidencia, por lo que puede saber dónde ocurrió la coincidencia mirando las propiedades de este objeto y saber exactamente qué caracteres coincidieron. La siguiente tabla muestra los atributos comunes del objeto Match:
Además de usar Match()
métodos, también puede usar Matches()
métodos para obtener múltiples resultados coincidentes. Matches()
El método devuelve un MatchCollection
objeto, que es Match
un objeto de colección. MatchCollection
Un objeto es un ICollection
objeto implementado , que se puede utilizar a través de foreach
declaraciones y GetEnumerator()
otros métodos.
Ejemplos, varias formas de usar expresiones regulares.
#region 示例1, 使用正则表达式的几种方法
static void Test1() {
string pattern = "[Bbw]ill";
string s = "My friend Bill will pay the bill";
if (Regex.IsMatch(s, pattern))
Console.WriteLine("\"{0}\" 与 \"{1}\" 相匹配", s, pattern);
Regex rx = new Regex(pattern);
MatchCollection mc = rx.Matches(s);
Console.WriteLine("有{0}次匹配:", mc.Count);
foreach (Match mt in mc)
Console.WriteLine(mt);
Match m = rx.Match(s);
while (m.Success) {
Console.WriteLine("在位置{0}有匹配{1}", m.Index, m.Value);
m = rx.Match(s, m.Index + m.Length); // 从m.Index + m.Length位置开始
}
Console.WriteLine("another way of writing:");
for (m = rx.Match(s); m.Success; m = m.NextMatch()) {
Console.WriteLine("在位置{0}有匹配{1}", m.Index, m.Value);
}
}
#endregion
resultado de la operación:
3. Utilice Buscar y reemplazar
La clase Regex puede proporcionar una coincidencia de patrones más avanzada que el ejemplo simple anterior. Uno de los más útiles es el uso de variables (identificadores) para búsqueda y reemplazo. La búsqueda está representada por el Resultado de coincidencia y el reemplazo está representado por Reemplazo de coincidencia.
Como en el siguiente ejemplo, la tarea de este ejemplo es procesar el número de teléfono de una unidad, sacar el nombre y la extensión e imprimirlo. Entre ellos, cada registro de la lista de teléfonos tiene la siguiente forma:
Dr.David Jones,Ophthalmology,x2441
Si desea extraer el apellido y la extensión e imprimirlos, el resultado es el siguiente:
2441,Jones
Por ejemplo, use Regex para reformatear los datos.
#region 使用Regex对数据进行重新格式化
static void Test2() {
string pattern = @"^[\. a-zA-Z]+ (?<name>\w+),[a-zA-Z]+,x(?<ext>\d+)$"; // 注意这里逗号为中文逗号
Console.WriteLine(pattern);
string[] sa = {
"Dr.David Jones,Ophthalmology,x2441",
"Ms.Cindy Harriman,Registry,x6231",
"Mr.Chester Addams,Mortuary,x1667",
"Dr.Hawkeye Pierce,Surgery,x0986",
};
Regex rx = new Regex(pattern);
foreach(string s in sa) {
Match m = rx.Match(s);
if(m.Success)
Console.Write(m.Result("${ext},${name}"));
Console.WriteLine("\t" + rx.Replace(s, "姓:${name},分机号:${ext}"));
}
}
#endregion
resultado de la operación:
La expresión regular aquí es:
^[\. a-zA-Z]+ (?<name>\w+),[a-zA-Z]+,x(?<ext>\d+)$
A continuación se explica esta expresión:
- ① Significa
^
hacer coincidir desde el principio de la cadena. - ②Significa
[\. a-zA-Z]
hacer coincidir todas las siguientes cadenas: caracteres de espacio, puntos, letras mayúsculas, letras minúsculas - ③
+
significa realizar uno o más partidos. Este patrón significa que el título y el nombre coinciden entre el nombre y el apellido. - ④
+
El espacio después del número significa coincidir con el espacio entre el nombre y el apellido. - ⑤
(?<name>\w+)
Se define un tipo especial de grupo. La?<name>
etiqueta significa agregar unaname
etiqueta a la cadena coincidente , que se puede usar para hacer referencia al texto coincidente más adelante.\w
El significado esa-zA-Z_0-9
exactamente el mismo que (forma abreviada), que significa una palabra que consta de uno o más caracteres, números o guiones bajos, y la palabra se adjunta con unaname
etiqueta para su almacenamiento. - ⑥ Coincide
[a-zA-Z]+
con los signos de puntuación y palabras que definen el departamento. Esto no está marcado, principalmente porque no está destinado a ser utilizado nuevamente. - ⑦ El número de extensión aparece después del
x
carácter y el patrón que coincide con el número de extensión le?<ext>\d+
permite capturar una matriz ordenada y adjuntar unaext
etiqueta para guardarla. - ⑧ El último
$
significa que el modo de extensión debe aparecer al final de cada línea.
Cuando se Match()
ejecuta, el Match
objeto final tiene dos elementos de etiqueta (identificadores): name
y ext
, que se utilizan para representar el nombre y el número de extensión. Match
El Result()
método del objeto hace posible obtener una cadena del resultado de salida y reemplazarla con la cadena coincidente. Las etiquetas name
y se utilizan aquí ext
y están incluidas ${}
.