2010-04-14 12 views
6

Tengo el siguiente texto:partido varias líneas con una expresión regular en C#

--------------030805090908050805080502 
Content-Type: image/jpeg 
Content-Transfer-Encoding: base64 
Content-ID: <[email protected]> 

/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAA 
/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAA 
QBQH/9k= 
--------------030805090908050805080502 
Content-Type: image/jpeg 
Content-Transfer-Encoding: base64 
Content-ID: <[email protected]> 

/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAA 
/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAA 
juu41lRHFLufPCAID//Z 
--------------030805090908050805080502-- 

Y tengo que conseguir con expresiones regulares en C# 2 partes:

  1. entre la primera y la segunda aparición de la cadena "--------------030805090908050805080502"
  2. entre las cuerdas y "--------------030805090908050805080502""--------------030805090908050805080502--"

yo probamos este regex:

--------------030805090908050805080502(\r.*)*--------------030805090908050805080502 

pero en C# regex.Matches(...) devoluciones solamente "--------------030805090908050805080502".

Respuesta

9
MatchCollection matches = Regex.Matches(text, @"([-]+\d{24}) 
               (?<Content>.*?) 
               (?=\1)", 
             RegexOptions.IgnorePatternWhitespace | 
             RegexOptions.Singleline); 

foreach (Match match in matches) 
{ 
    Console.WriteLine( 
     string.Format("match: {0}\n\n", 
         match.Groups[ "Content" ].Value)); 
} 

Actualización: Esta expresión encontrará todos los partidos que vienen entre dos apariciones de un número. Si el número debe ser específico, en lugar de cualquier número de 24 dígitos, cambie "\ d {24}" al número que desea emparejar.

+0

¿Cómo se verá su Regex si no sé el número de iteración para "-------------- 030805090908050805080502"? – Emanuel

+0

Reemplace el número de iteración con \ d + para que coincida con cualquier cadena de dígitos. Si el número de iteración es siempre de 24 dígitos, \ d {24} lo hará. –

+0

Quería decir que no sé el número de líneas en las que aparece "-------------- 030805090908050805080502". – Emanuel

1

Ha intentado una Split:

var str = stringToParse.Split(
    new[] { "--------------030805090908050805080502" }, 
    StringSplitOptions.None); 
Console.WriteLine(str[1]); 
+0

En este momento esta operación se realiza con división, pero quiero usar Regex. – Emanuel

Cuestiones relacionadas