gpt4 book ai didi

c# - 在 .NET 正则表达式中高效组合 MatchCollection

转载 作者:可可西里 更新时间:2023-11-01 08:40:04 26 4
gpt4 key购买 nike

在简化示例中,有两个正则表达式,一个区分大小写,另一个不区分大小写。这个想法是有效地创建一个 IEnumerable 集合(参见下面的“组合”)组合结果。

string test = "abcABC";
string regex = "(?<grpa>a)|(?<grpb>b)|(?<grpc>c)]";
Regex regNoCase = new Regex(regex, RegexOptions.IgnoreCase);
Regex regCase = new Regex(regex);

MatchCollection matchNoCase = regNoCase.Matches(test);
MatchCollection matchCase = regCase.Matches(test);

// Combine matchNoCase and matchCase into an IEnumerable
IEnumerable<Match> combined = null;
foreach (Match match in combined)
{
// Use the Index and (successful) Groups properties
//of the match in another operation

}

在实践中,MatchCollections 可能包含数千个结果,并且经常使用动态创建的长正则表达式运行,所以我想避免将结果复制到数组等。我仍在学习 LINQ 并且不清楚如何将这些结合起来,或者性能对已经缓慢的过程有什么影响。

最佳答案

这里分为三个步骤:

  1. 转换 MatchCollectionIEnumerable<Match>
  2. 连接序列
  3. 按是否 Match.Success 过滤属性为真

代码:

IEnumerable<Match> combined = matchNoCase.OfType<Match>().Concat(matchCase.OfType<Match>()).Where(m => m.Success);

这样做会创建一个新的枚举器,它只会在获取下一个结果时执行每个步骤,因此您最终只会对每个集合进行一次枚举,总计。例如,Concat()只会在第一个枚举器用完后才开始执行第二个枚举器。

关于c# - 在 .NET 正则表达式中高效组合 MatchCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2917481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com