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

C# 字边界正则表达式问题(重叠),c#,asp.net,regex,word-boundary,C#,Asp.net,Regex,Word Boundary,给定以下代码: 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"); var myList=新列表{“红色衬

给定以下代码:

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");
var myList=新列表{“红色衬衫”、“蓝色”、“绿色”、“红色”};
Regex r=newregex(“\\b(“+string.Join(“|”),myList.ToArray())+”\\b”);
MatchCollection m=r.Matches(“阿尔弗雷德有一件红衬衫和一条蓝领带”);

我希望
m
的结果包括
“红色衬衫”、“蓝色”、“红色”
,因为所有这些都在字符串中,但我只得到
“红色衬衫”、“蓝色”
。如何包含重叠?

在我看来,只要找到第一个有效匹配项,regexp解析器就会删除匹配字符串。我现在没有windows编译器设置,因此无法进行苹果对苹果的比较,但我在perl中看到了类似的结果

我想你的正则表达式加入后会像这样

“\b(红色衬衫|蓝色|绿色|红色)\b”

在测试这个regexp时,我看到了与“红色衬衫”、“蓝色”相同的结果。 将“red shirt”移动到regexp列表的末尾

“\b(红色|蓝色|绿色|红色衬衫)\b”

我现在看到“红色”、“蓝色”

通过将regexp更改为稍微复杂一点的方法,您可能能够获得想要的结果

\b(蓝色|绿色|(红色)衬衫)\b

这应该匹配红色作为它自己的子组和红色衬衫作为一个组

返回“红色衬衫”、“红色”、“蓝色”

更简单的方法是在字符串列表中循环,一次匹配1,如果你有很多单词组需要多个匹配项,比如red和redshirt


由于有这么多的方法来执行regexp,我可能错过了一个明显而优雅的解决方案。

在我看来,一旦找到第一个有效匹配项,regexp解析器就会删除匹配字符串。我现在没有windows编译器设置,因此无法进行苹果对苹果的比较,但我在perl中看到了类似的结果

我想你的正则表达式加入后会像这样

“\b(红色衬衫|蓝色|绿色|红色)\b”

在测试这个regexp时,我看到了与“红色衬衫”、“蓝色”相同的结果。 将“red shirt”移动到regexp列表的末尾

“\b(红色|蓝色|绿色|红色衬衫)\b”

我现在看到“红色”、“蓝色”

通过将regexp更改为稍微复杂一点的方法,您可能能够获得想要的结果

\b(蓝色|绿色|(红色)衬衫)\b

这应该匹配红色作为它自己的子组和红色衬衫作为一个组

返回“红色衬衫”、“红色”、“蓝色”

更简单的方法是在字符串列表中循环,一次匹配1,如果你有很多单词组需要多个匹配项,比如red和redshirt

由于有这么多的方法来执行regexp,我可能错过了一个明显而优雅的解决方案