2010-12-26 12 views
6

tengo un siguiente problema con mi expresión regular, me gustaría que coincida oruga en la cadena "Esta es una oruga s diente" pero coincide gato. ¿Cómo puedo cambiarlo?C# expresiones regulares para que coincida con las palabras de la lista

 List<string> women = new List<string>() 
     { 
      "cat","caterpillar","tooth" 
     }; 

     Regex rgx = new Regex(string.Join("|",women.ToArray())); 


     MatchCollection mCol = rgx.Matches("This is a caterpillar s tooth"); 
     foreach (Match m in mCol) 
     { 
      //Displays 'cat' and 'tooth' - instead of 'caterpillar' and 'tooth' 
      Console.WriteLine(m); 
     } 

Respuesta

10

Necesita una expresión regular de la forma \b(abc|def)\b.
\b es un separador de palabras.

Además, debe llamar al Regex.Escape en cada palabra.

Por ejemplo:

new Regex(@"\b(" + string.Join("|", women.Select(Regex.Escape).ToArray()) + @"\b)"); 
+0

Gracias, pero ¿por qué necesito 'Regex.Escape' funciona simplemente ingenios' \ B's? –

+0

@user: ¿Qué pasa si tu cadena contiene un '\'? – SLaks

+0

debería ser '\ b (abc | def) \ b' o' \ b (abc | def \ b) '- tus ejemplos de C# dan un resultado diferente que tu ejemplo en la primera línea. – Gerwald

Cuestiones relacionadas