2010-04-14 4 views
6

У меня есть следующий текст:Совпадение несколько строк с регулярным выражением в 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-- 

И мне нужно, чтобы получить с Regex в C# 2 части:

  1. между первым и вторым вхождением строка "--------------030805090908050805080502"
  2. между струнами "--------------030805090908050805080502" и "--------------030805090908050805080502--"

Я попытался это регулярное выражение:

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

, но в C# regex.Matches(...) возвращается только "--------------030805090908050805080502".

ответ

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

Update: Это выражение будет найти все матчи, которые идут между двумя вхождений числа. Если число должно быть конкретным, а не любое 24-значное число, измените «\ d {24}» на число, которое вы хотите сопоставить.

+0

Как будет выглядеть ваше Regex, если я не знаю номера итерации для «-------------- 030805090908050805080502»? – Emanuel

+0

Замените номер итерации на \ d +, чтобы соответствовать любой строке цифр. Если номер итерации всегда 24 цифры, \ d {24} это сделает. –

+0

Я хотел сказать, что не знаю числа строк, в которых появляются «-------------- 030805090908050805080502». – Emanuel

1

Вы пробовали Split:

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

В это время эта операция выполняется с помощью split, но я хочу использовать Regex. – Emanuel

Смежные вопросы