如何删除 MatchCollection 中的重复匹配项

发布于 2024-12-22 02:59:46 字数 248 浏览 2 评论 0原文

在我的 MatchCollection 中,我得到了相同内容的匹配项。像这样:

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

如何删除重复的匹配项,这是最快的方法吗?

假设这里的“重复”意味着匹配包含完全相同的字符串。

In my MatchCollection, I get matches of the same thing. Like this:

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

How does one remove duplicate matches and is it the fastest way possible?

Assume "duplicate" here means that the match contains the exact same string.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

桃扇骨 2024-12-29 02:59:46

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);

Linq

If you are using .Net 3.5 or greater such as 4.7, linq can be used to remove the duplicates of the match.

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 or No Linq

Place it into a hastable then extract the strings:

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);
乖乖哒 2024-12-29 02:59:46

尝试

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

Try

Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.Compiled);
string text = @"match match match";
MatchCollection matches = rx.Matches(text);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文