我正在尝试在两个分隔符[% %]
之间匹配文本,我想知道字符串是否包含新行。
代码
string strEmailContent = sr.ReadToEnd();
string commentPatt = @"\[%((\r\n?|\n).*(\r\n?|\n))%\]";
Regex commentRgx = new Regex(commentPatt, RegexOptions.Singleline);
示例输入
//Successful
[%
New Comment
%] other content from input
//Match: [%\r\nNew Comment\r\n%]
//Fail
[% New Comment %]
//Match: false
//Successfully match single line with
string commentPatt = @"\[%(.*)%\]";
//Match: [% New Comment %]
我不知道如何将这两种模式结合起来以匹配这两种情况。任何人都可以提供任何帮助吗?
答案 0 :(得分:1)
尝试这种模式:
\[%([^%]*)%\]
它捕获" [%
"之间的所有字符。和" %]
"那不是" %
"字符。
经过测试@ Regex101
如果你想"看" " \r\n
"在您的搜索结果中,您必须使用String.Replace()
转义它们。
请参阅Fiddle Demo
答案 1 :(得分:1)
要在两个分隔符之间获取文本,您需要将延迟匹配与.*?
一起使用,但为了匹配换行符号,还需要(?s)
单行修饰符,以便点可以也匹配换行符号:
(?s)\[%(.*?)%]
请注意,即使(?s)\[%(.*?)%]
位于%
内,[%...%]
也会匹配。
见regex demo。请注意,]
不必转义,因为它位于一个明确的位置,只能被解释为文字]
。
在C#中,您可以使用
var rx = new Regex(@"(?s)\[%(.*?)%]");
var res = rx.Matches(str).Cast<Match>().Select(p => p.Groups[1].Value).ToList();