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.
您在寻找重复捕获组吗?
(.)\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)
我最终想通了:
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