如何在发生单词后搜索,例如想象下面的字符串:
The Fisrt Colors
red green yellow
blue white violet
red green orange
The Second Colors
red black white
green cyan magenta
red magenta blue
我需要搜索包含red
的行,并且在上面示例中它们位于The Second Colors
之后,期望的结果是:
red black white
red magenta blue
我用以下方法进行简单搜索:
foreach (Match match in Regex.Matches(MyString, @"[\n\r].*red\s*([^\n\r]*)"))
{
}
但上面的代码在这种情况下不起作用,因为它返回
red green yellow
red green orange
red black white
red magenta blue
编辑1:
正如@Jonesopolis评论的那样,如果将The Second Colors
移到The First Colors
之上,该怎么办?我的意思是如何限制这两个标题之间的结果(例如The Second Colors
和The Third Colors
?
答案 0 :(得分:1)
当您必须匹配模式时,正则表达式是一个强大的工具,但是当您开始向模式添加逻辑时,很容易陷入丑陋的情况。
因此,您可以使用两个正则表达式来简化您的工作。例如,您可以使用第一个正则表达式来提取Second Colors
的内容,如下所示:
Second Colors([\s\S]*?)(?:The|$)
然后用第二种方法说明用红色捕捉图案:
(red.*)
这种方法比使用一个怪物正则表达式来制作技巧更清晰
更新:在评论中提及 stribizhev ,您实际上可以用通配符[\s\S]
替换.
的技巧并利用单行标志。所以你可以:
(?s)Second Colors(.*?)(?:The|$)
你将拥有一个性能更好的正则表达式。
答案 1 :(得分:-1)
(?<=\bThe Second Colors\b[\s\S]*?)[\n\r].*red\s*([^\n\r]*)
使用变量lookbehind
。{{3}}