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

时间:2017-01-09 18:39:20

标签: 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"正则表达式,但我没有得到预期的结果。

1 个答案:

答案 0 :(得分:1)

.*?仍然会在aaaa之间与kk匹配。

使用tempered greedy token

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

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

请参阅regex demo

<强>详情:

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

enter image description here

C# code

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<Match>()
    .Select(p => p.Groups[1].Value)
    .ToList();