所以我在下面有一个文本块,
#start
Line 1
Line 2
Line 3
#end
*--Similar blocks-*
我用了
Regex.Matches(text,@"#start(.*?)#end",RegexOptions.Multiline)
此代码块的正则表达式。
问题是,当我尝试通过记事本++查找此正则表达式查找选项时,它可以工作,但通过C#正则表达式。匹配功能失败。
我不知道到底是什么问题。但是希望大家能帮助我! :)
答案 0 :(得分:2)
点字符与换行符以外的任何字符匹配。因此,它与#start
初始字符串之后的任何内容都不匹配。尝试以下正则表达式:#start(.|\s)+?#end
(已测试here)。
正如其他用户的评论/答案所指出的那样,另一个更简单的解决方案是激活“单行”正则表达式选项,该选项强制正则表达式匹配器将点字符视为任何字符,包括换行符。这将允许OP的原始正则表达式无需修改即可使用。可以通过在匹配正则表达式的同时传递RegexOptions.Singleline
选项来激活单行正则表达式模式,如下所示:
Regex.Matches(text, @"#start(.*?)#end", RegexOptions.Singleline);
答案 1 :(得分:1)
您需要一个Singleline
正则表达式模式。尝试使用此代码,它将在#start
和#end
之间打印文本
var input = @"#start
Line 1
Line 2
Line 3
#end
#start
Line 4
Line 5
Line 6
#end";
var reges = new Regex("#start(.*?)#end", RegexOptions.Singleline);
var blocks = reges.Matches(input).Cast<Match>();
foreach (var block in blocks)
Console.WriteLine(block.Groups[1].Value);