如何删除MatchCollection中的重复匹配

时间:2011-12-21 16:08:41

标签: c# regex duplicates match

在我的MatchCollection中,我得到同样的匹配。像这样:

string text = @"match match match";
Regex R = new Regex("match");
MatchCollection M = R.Matches(text);

如何删除重复的匹配并以最快的方式进行?

假设“复制”在这里表示匹配包含完全相同的字符串。

2 个答案:

答案 0 :(得分:15)

LINQ的

如果您使用.Net 3.5或更高版本(如4.7),则可以使用linq删除匹配项的副本。

string data = "abc match match abc";

Console.WriteLine(string.Join(", ", 

Regex.Matches(data, @"([^\s]+)")
     .OfType<Match>()
     .Select (m => m.Groups[0].Value)
     .Distinct()

));

// Outputs abc, match

.Net 2或No Linq

将它放入hastable然后提取字符串:

string data = "abc match match abc";

MatchCollection mc = Regex.Matches(data, @"[^\s]+");

Hashtable hash = new Hashtable();

foreach (Match mt in mc)
{
    string foundMatch = mt.ToString();
    if (hash.Contains(foundMatch) == false)
        hash.Add(foundMatch, string.Empty);

}

// Outputs abc and match.
foreach (DictionaryEntry element in hash)
    Console.WriteLine (element.Key);

答案 1 :(得分:1)

尝试

Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.Compiled);
string text = @"match match match";
MatchCollection matches = rx.Matches(text);