2011-02-03 10 views
10

Estoy tratando de extraer valores de una cadena que están entre < < y >>. Pero podrían suceder muchas veces.RegEx Match varias veces en la cadena

¿Alguien puede ayudar con la expresión regular para que coincida con estos;

this is a test for <<bob>> who like <<books>> 
test 2 <<frank>> likes nothing 
test 3 <<what>> <<on>> <<earth>> <<this>> <<is>> <<too>> <<much>>. 

Entonces quiero foreach the GroupCollection para obtener todos los valores.

Cualquier ayuda recibida. Gracias.

Respuesta

28

Utilice un aspecto positivo adelante y mirar detrás de la afirmación para que coincida con los soportes de ángulo, utilice .*? para que coincida con el la secuencia más corta posible de caracteres entre esos paréntesis. Encuentre todos los valores iterando el MatchCollection devuelto por el método Matches().

Regex regex = new Regex("(?<=<<).*?(?=>>)"); 

foreach (Match match in regex.Matches(
    "this is a test for <<bob>> who like <<books>>")) 
{ 
    Console.WriteLine(match.Value); 
} 
+0

sin juego de palabras, pero esto es exactamente lo que estoy buscando. Gracias por tus respuestas realmente rápidas. –

1

Puede probar uno de estos:

(?<=<<)[^>]+(?=>>) 
(?<=<<)\w+(?=>>) 

Sin embargo, tendrá que repetir el MatchCollection devuelto.