如何在C#Regex中使用lookbehind以跳过重复前缀模式的匹配?

luv*_*ere 6 c# regex lookbehind

如何在C#Regex中使用lookbehind以跳过重复前缀模式的匹配?

示例 - 我正在尝试使表达式匹配b任意数量的字符后面的所有a字符:

Regex expression = new Regex("(?<=a).*");

foreach (Match result in expression.Matches("aaabbbb"))
  MessageBox.Show(result.Value);
Run Code Online (Sandbox Code Playgroud)

返回aabbbb,lookbehind只匹配一个a.我怎样才能使它a与开头的所有s 匹配?

我试过了

Regex expression = new Regex("(?<=a+).*");
Run Code Online (Sandbox Code Playgroud)

Regex expression = new Regex("(?<=a)+.*");
Run Code Online (Sandbox Code Playgroud)

没有结果......

我期待的是bbbb.

Joh*_*zen 7

您在寻找重复捕获组吗?

(.)\1*
Run Code Online (Sandbox Code Playgroud)

这将返回两场比赛.

鉴于:

aaabbbb
Run Code Online (Sandbox Code Playgroud)

这将导致:

aaa
bbbb
Run Code Online (Sandbox Code Playgroud)

这个:

(?<=(.))(?!\1).*
Run Code Online (Sandbox Code Playgroud)

使用上面的主体,首先检查找到前一个字符,将其捕获到后一个引用,然后断言该字符不是下一个字符.

匹配:

bbbb
Run Code Online (Sandbox Code Playgroud)


luv*_*ere 5

我最终想通了:

Regex expression = new Regex("(?<=a+)[^a]+");

foreach (Match result in expression.Matches(@"aaabbbb"))
   MessageBox.Show(result.Value);
Run Code Online (Sandbox Code Playgroud)

我不能允许as 与非后向组匹配。这样,表达式将仅匹配b重复后面的a重复。

匹配aaabbbb产生和的bbbb匹配aaabbbbcccbbbbaaaaaabbzzabbb结果。bbbbcccbbbbbbzzbbb