繁体   English   中英

C#Regex在有或没有新行的情况下匹配

[英]C# Regex Match between with or without new lines

我试图匹配两个分隔符之间的文本, [% %] ,我想得到一切,无论字符串是否包含新行。

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

我不知道如何结合这两种模式来匹配这两种情况。 有人可以提供任何帮助吗?

试试这种模式:

\[%([^%]*)%\]

它捕获不是“ % ”字符的“ [% ”和“ %] ”之间的所有字符。

测试@ Regex101

如果要在结果中“看到”“ \\r\\n ”,则必须使用String.Replace()来转义它们。

请参阅小提琴演示

要在两个分隔符之间获取文本,您需要使用延迟匹配 .*? ,但为了匹配换行符号,您需要(?s)单行修饰符,以便点也可以匹配换行符号:

(?s)\[%(.*?)%]

请注意,即使%[%...%]内, (?s)\\[%(.*?)%]也会匹配。

请参阅正则表达式演示 请注意, ]不必转义,因为它位于一个明确的位置,只能被解释为文字]

在C#中,您可以使用

var rx = new Regex(@"(?s)\[%(.*?)%]");
var res = rx.Matches(str).Cast<Match>().Select(p => p.Groups[1].Value).ToList();

暂无
暂无

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

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