如果你想使用正则表达式,你可以稍微修改你当前的正则表达式,因为 $0 组有你要找的东西。
BEGIN:VBODY\n?((?:[^\n]*\n+)+?)END:VBODY
基本上发生的事情([^\n]*\n+)+
变成了(?:[^\n]*\n+)+?
(把这部分变得懒惰可能更安全)
然后将整个部分包裹在括号周围:((?[^\n]*\n+)+?)
我\n?
在此之前添加了以使输出更清晰。
非正则表达式解决方案可能是这样的:
string str = @"N:
TEL:+65123345
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:8/11/2013 11:59:00 PM
thi is a test message
Hello this is a test message on line 2
END:VBODY
END:VENV
END:VENV
END:VMSG";
int startId = str.IndexOf("BEGIN:VBODY")+11; // 11 is the length of "BEGIN:VBODY"
int endId = str.IndexOf("END:VBODY");
string result = str.Substring(startId, endId-startId);
Console.WriteLine(result);
输出:
Date:8/11/2013 11:59:00 PM
thi is a test message
Hello this is a test message on line 2
ideone演示