C# 正则表达式。在两个单词之间匹配特定单词

C# 正则表达式。在两个单词之间匹配特定单词,c#,regex,C#,Regex,我用C#。我有一个字符串: wordA wordB wordC wordB wordD 我需要匹配wordA和wordD之间出现的所有wordB。 我使用lookahead和lookahead来匹配wordA和worD之间的所有内容,如下所示: (?<=wordA)(.*?)(?=wordD) (?将*?放入周围观察区: (?<=wordA.*?)wordB(?=.*?wordD) 请参阅。它在您提供的演示上运行得非常好。但我在regex101.com上也尝试过类似的方法,但出

我用C#。我有一个字符串:

wordA wordB wordC wordB wordD
我需要匹配wordA和wordD之间出现的所有wordB。 我使用lookahead和lookahead来匹配wordA和worD之间的所有内容,如下所示:

(?<=wordA)(.*?)(?=wordD)

(?将
*?
放入周围观察区:

(?<=wordA.*?)wordB(?=.*?wordD)

请参阅。

它在您提供的演示上运行得非常好。但我在regex101.com上也尝试过类似的方法,但出现了错误。不同的在线编译器之间有什么区别吗?我将URL保存在这里@Utsav:如果网站不支持.NET regex语法,为什么要使用它来测试.NET regex?问题用C#标记。请参阅C#demo我补充了答案。@Wiktor Stribiżew谢谢!你似乎想抓住这个词(因为它被括号包围)。如果是这样,你也可以使用更通用的变体
\bfirst\b.*\b(second)\b.*\b第三个\b
插图。它适用于大多数正则表达式:)区别在于,它匹配从第一个单词到第三个单词的所有内容,但只捕获第二个单词。这可能是不想要的行为,如果是这样,@WiktorStribiżew给出的环顾四周的方法可以做到这一点。除了更加通用之外,我不认为这与Wiktors方法有任何关系。
(?<=wordA.*?)wordB(?=.*?wordD)
var s = "wordA wordB wordC wordB \n wordD";
var pattern = @"(?<=wordA.*?)wordB(?=.*?wordD)";
var result = Regex.Replace(s, pattern, "<<<$&>>>", RegexOptions.Singleline);
Console.WriteLine(result);
// => wordA <<<wordB>>> wordC <<<wordB>>> 
//    wordD