Expresión regular de notas de estudio de C #

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, 2022etc.
Consulte la tabla siguiente para obtener más detalles:
Inserte la descripción de la imagen aquí
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 caracteres aseguidos de caracteres b, por ejemplo, " ab", " aab" y " aaab"
  • ab+- a aseguido de una o más bcadenas coinciden, puede ab" 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-6666forma 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.RegexLa 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 stringparámetro de constructor del Regexobjeto 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 staticla 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 Regexobjeto 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 Matchobjeto, 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:
Inserte la descripción de la imagen aquí
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 MatchCollectionobjeto, que es Matchun objeto de colección. MatchCollectionUn objeto es un ICollectionobjeto implementado , que se puede utilizar a través de foreachdeclaraciones 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:
Inserte la descripción de la imagen aquí

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:
Inserte la descripción de la imagen aquí

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 una nameetiqueta a la cadena coincidente , que se puede usar para hacer referencia al texto coincidente más adelante. \wEl significado es a-zA-Z_0-9exactamente 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 una nameetiqueta 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 xcarácter y el patrón que coincide con el número de extensión le ?<ext>\d+permite capturar una matriz ordenada y adjuntar una extetiqueta para guardarla.
  • ⑧ El último $significa que el modo de extensión debe aparecer al final de cada línea.

Cuando se Match()ejecuta, el Matchobjeto final tiene dos elementos de etiqueta (identificadores): namey ext, que se utilizan para representar el nombre y el número de extensión. MatchEl Result()método del objeto hace posible obtener una cadena del resultado de salida y reemplazarla con la cadena coincidente. Las etiquetas namey se utilizan aquí exty están incluidas ${}.

Supongo que te gusta

Origin blog.csdn.net/qq_45349225/article/details/114645989
Recomendado
Clasificación