繁体   English   中英

在C#中使用正则表达式匹配多行

[英]Match multiple lines with a regex in C#

我有以下文字:

--------------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--

我需要在C#2部分使用Regex:

  1. 字符串"--------------030805090908050805080502"的第一个和第二个出现之间
  2. 字符串"--------------030805090908050805080502""--------------030805090908050805080502--"

我试过这个正则表达式:

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

但在C#中, regex.Matches(...)仅返回"--------------030805090908050805080502"

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}”更改为您要匹配的号码。

你试过斯普利特

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM