Совпадение нескольких строк с регулярным выражением в C # - PullRequest
6 голосов
/ 15 апреля 2010

У меня есть следующий текст:

--------------030805090908050805080502
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part16.07030906.00090703@highcontrast.ro>

/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAA
/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAA
QBQH/9k=
--------------030805090908050805080502
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part17.07010805.02020809@highcontrast.ro>

/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".

Ответы [ 2 ]

9 голосов
/ 15 апреля 2010
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 ) );
}

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

1 голос
/ 15 апреля 2010

Вы пробовали Сплит :

var str = stringToParse.Split(
    new[] { "--------------030805090908050805080502" }, 
    StringSplitOptions.None);
Console.WriteLine(str[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...