[英]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 %]
我不知道如何结合这两种模式来匹配这两种情况。 有人可以提供任何帮助吗?
要在两个分隔符之间获取文本,您需要使用延迟匹配 .*?
,但为了匹配换行符号,您需要(?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.