使用C#regex获取两个多字符分隔符之间的最短子串

我有

string text = "aa aa value kk 8718764 aa value1 kk kk kk 5178gkjh aathtkhkk"; 

我想获得aakk之间的所有文本,预期的结果是:

 1 = value 2 = value1 3 = thtkh 

我尝试使用"aa(.*?)kk"正则表达式,但我没有得到预期的结果。

.*? 仍然会在aakk之间匹配aa

使用驯化的贪婪令牌 :

 aa((?:(?!aa).)*?)kk ^^^^^^^^^^^^^ 

要么

 aa((?:(?!aa|kk).)*)kk ^^^^^^^^^^^^^^^ 

请参阅正则表达式演示

细节

  • aa – 一个子字符串
  • ((?:(?!aa).)*?) – 第1组捕获任何零个或多个字符(如果使用RegexOptions.Singleline选项,甚至包括换行符),它们不会启动aa子字符串序列,尽可能少
  • kk – 一个kk子串

在此处输入图像描述

C#代码 :

 var re = @"aa((?:(?!aa).)*?)kk"; var str = "aa aa value kk 8718764 aa value1 kk kk kk 5178gkjh aathtkhkk"; var res = Regex.Matches(str, re) .Cast() .Select(p => p.Groups[1].Value) .ToList();