字边界正则表达式问题(重叠)

给出以下代码:
var myList = new List<string> { "red shirt", "blue", "green", "red" };
Regex r = new Regex("\b(" + string.Join("|", myList.ToArray()) + ")\b");
MatchCollection m = r.Matches("Alfred has a red shirt and blue tie");
我希望
m
的结果包括
"red shirt", "blue", "red"
,因为所有这些都在字符串中,但我只得到
"red shirt", "blue"
。我该怎么做才能包含重叠?     
已邀请:
在我看来,一旦找到第一个有效匹配,regexp解析器就会删除匹配字符串。我现在没有Windows编译器设置所以我不能给苹果比较,但我在perl中看到了类似的结果。 我认为你的正则表达式在加入之后会看起来像这样。 ' b(红色衬衫|蓝色|绿色|红色) b' 测试这个正则表达式我看到的结果与“红色衬衫”,“蓝色”相同。 通过将“红色衬衫”移动到正则表达式列表的末尾。 ' b(红色|蓝色|绿色|红色衬衫) b' 我现在看到“红色”,“蓝色”。 通过将正则表达式更改为更复杂的方法,您可以获得所需的结果。 b(蓝色|绿色|(红色)衬衫) b 这应该将红色作为自己的子组和红色衬衫作为一组进行匹配。 返回“红色衬衫”,“红色”,“蓝色” 更简单的方法是循环遍历你的字符串列表并一次匹配1,如果你有许多单词组需要多个匹配,如红色和红色衬衫。 由于有很多方法可以做regexp,我可能错过了一个明显而优雅的解决方案。     

要回复问题请先登录注册