2010-04-14 10 views
6

Mam następujący tekst:meczowe wielokrotne linie z regex w 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-- 

I muszę się z Regex w C# 2 części:

  1. między pierwszym a drugim występowania ciąg "--------------030805090908050805080502"
  2. między strunami "--------------030805090908050805080502" i "--------------030805090908050805080502--"

Próbowałem tej regex:

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

ale w C# regex.Matches(...) powraca tylko "--------------030805090908050805080502".

Odpowiedz

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)); 
} 

Aktualizacja: Wyrażenie to znajdzie wszystkie mecze, które pochodzą między dwoma występującymi liczby. Jeśli numer musi być konkretny, a nie jakikolwiek 24-cyfrowy numer, zmień "\ d {24}" na numer, który chcesz dopasować.

+0

Jak Regex będzie wyglądać, jeśli nie znam numeru iteracji dla "-------------- 030805090908050805080502"? – Emanuel

+0

Zamień numer iteracji na \ d +, aby dopasować dowolny ciąg cyfr. Jeśli numer iteracji ma zawsze 24 cyfry, \ d {24} zrobi to. –

+0

Chciałem powiedzieć, że nie znam liczby linii, w których pojawia się "-------------- 030805090908050805080502". – Emanuel

1

Czy spróbował Split:

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

W tej chwili ta operacja jest wykonywana z podziałem, ale chcę użyć Regex. – Emanuel