我很茫然,我需要一些帮助。
字符串如下:
"Hello World
@start some text @end
@start more text @end"
我需要一个正则表达式模式,它匹配从@start
到第一个@end
的任何内容。在这个例子中,我们将有两个匹配(@start (some text) @end
)。 @标签内的文本可以包含换行符。
有什么想法吗?
答案 0 :(得分:1)
此代码:
string s = "Hello world\n@start text1 @end\n@start text2 @end";
Regex r = new Regex(@"(?<=@start)[\s\S]*?(?=@end)");
var mm = r.Matches(s);
制作了2场比赛。
技巧是:
*?
而不仅仅是*
)[\s\S]
来匹配任何字符,包括换行符(?...)
)答案 1 :(得分:0)
(?<=@start).*?(?=@end)
编辑:哎呀,制作单行
&#34;&#34;默认情况下不会匹配换行符,但您可以启用此换行符。如何做到这一点取决于您使用的正则表达式引擎,但通常它被称为&#34;单行&#34;
编辑:看到你正在使用.NET。试试这个:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace RegexSandboxCSharp {
class Program {
static void Main(string[] args) {
string l_input = @"Hello World
@start some text @end
@start more text @end";
// This is the relevant piece of code:
MatchCollection l_matches = Regex.Matches( l_input, "(?<=@start).*?(?=@end)", RegexOptions.Singleline );
foreach ( Match l_match in l_matches ) {
Console.WriteLine( l_match.Value );
}
Console.ReadKey( true );
}
}
}