2010-04-14 27 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-- 

我需要與正則表達式來獲得在C#2部分:

    第一和第二occurence之間
  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)); 
} 

更新:這個表達式將找到所有來兩次出現了一些比較匹配。如果號碼需要是特定號碼,而不是任何24位數字,請將「\ d {24}」更改爲您想匹配的號碼。

+0

如果我不知道「-------------- 030805090908050805080502」的迭代次數,您的正則表達式將如何顯示? – Emanuel 2010-04-14 22:01:39

+0

用\ d +替換迭代編號以匹配任何數字字符串。如果迭代次數始終爲24位數,則\ d {24}將執行此操作。 – 2010-04-15 12:54:46

+0

我想說我不知道​​「-------------- 030805090908050805080502」出現的行數。 – Emanuel 2010-04-15 16:58:09

1

你有沒有試過Split

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

在這個時候這個操作是用分割完成的,但我想用正則表達式。 – Emanuel 2010-04-14 21:53:58