如果匹配先于空格,则避免重复匹配

时间:2016-12-01 01:01:10

标签: c# regex

我有一个包含

等名称的字符串
"james frederick ricky rick jones"

我想通过FIRST匹配" rick"来分割这个字符串。前面有一个空格

代码如下(在C#中)

string source = "james frederick ricky rick jones";
string expression = "(rick)(?<!\1.*\1)";

string[] chunks = Regex.Split(source, expression, RegexOptions.IgnoreCase);

我得到的结果是这样的

[0] - "james frede"
[1] - "rick"
[2] - "ricky rick jones"

是否可以更改或修改正则表达式以获得以下结果?

[0] - "james frederick"
[1] - "rick"
[2] - "y rick jones"

3 个答案:

答案 0 :(得分:0)

试试这个:

(?:\s)+(rick)

(?:\s)+是一个非选择的捕获组,在&#34; rick&#34;之前检查一个或多个空间匹配。所以应该是你正在寻找的东西。

答案 1 :(得分:0)

这个将字符串分成三个捕获组:

(.+?) (rick)(.+)

https://regex101.com/r/UceAEC/2

答案 2 :(得分:0)

这非常接近你的尝试。在&#34; rick&#34;之前放一个空格。在正则表达式。

string source = "james frederick ricky rick jones";
string expression = @"(\srick)(?<!\1.*\1)";

string[] chunks = Regex.Split(source, expression, RegexOptions.IgnoreCase);
var ch = chunks.Select(c =>c.TrimStart());

注意:根据你在问题中的要求,这确实会发现rick前面有一个空格。