使用正则表达式在块中查找文本

时间:2018-10-15 17:40:10

标签: c# regex

所以我在下面有一个文本块,

#start
Line 1
Line 2
Line 3
#end

*--Similar blocks-*

我用了

Regex.Matches(text,@"#start(.*?)#end",RegexOptions.Multiline)

此代码块的正则表达式。

问题是,当我尝试通过记事本++查找此正则表达式查找选项时,它可以工作,但通过C#正则表达式。匹配功能失败。

我不知道到底是什么问题。但是希望大家能帮助我! :)

2 个答案:

答案 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);