为了账号安全,请及时绑定邮箱和手机立即绑定

检查字符串是否在Enumerable.Range筛选器列表中包含匹配项

检查字符串是否在Enumerable.Range筛选器列表中包含匹配项

C#
www说 2021-03-31 17:10:06
我想检查字符串是否包含列表中的单词或数字,并将其从字符串中删除。我想用来Enumerable.Range()创建过滤器列表,并用它来过滤许多不同的字符串。我试图结合之前的两个答案:https : //stackoverflow.com/a/49733139/6806643https://stackoverflow.com/a/49740832/6806643我要过滤的句子:这是A05B09你好02100测试筛选A00B00-A100B100,01-100,000-100,hello应该读:这是一个测试旧方法For Loop-作品http://rextester.com/BJL70824新方法Enumerable Range List-不起作用http://rextester.com/ZSCM64375C#List<List<string>> filters = Enumerable.Range(0, 101)       .SelectMany(a => Enumerable.Range(0, 101).Select(b => "A{0:00}B{1:00}"))       .Select(i => Enumerable.Range(0, 10).Select(c => string.Empty).ToList())           .SelectMany(a => Enumerable.Range(0, 101).Select(b => "{0:000}"))           .SelectMany(a => Enumerable.Range(0, 101).Select(b => "{0:00}"))           .SelectMany(a => Enumerable.Range(0, 1).Select(b => "hello"))           .ToList();List<string> matches = new List<string>();// Sentencestring sentence = "This is a A05B09 hello 02 100 test";string newSentence = string.Empty;// Find Matchesfor (int i = 0; i < filters.Count; i++){    // Add to Matches List    if (sentence.Contains(filters[i].ToString()))    {        matches.Add(filters[i]);    }}// Filter SentencenewSentence = Regex.Replace(    sentence,   @"(?<!\S)(" + string.Join("|", matches) + @")(?!\S)",   "",   RegexOptions.IgnoreCase);// Display New SentenceConsole.WriteLine(newSentence);
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

我认为创建所有可能组合的列表是一种非常糟糕的方法。您正在创建庞大的列表,这将使您的进程使用大量RAM,并且没有任何正当理由就会非常慢。为什么不仅仅创建一个好的Regex?例如,使用此表达式,您将获得所需的字符串:

\b(A\d\dB\d\d|A100B100|0?\d\d|100|hello)\b\s*

那是假设您不想替换诸如A101B101或之类的东西123

如果您也想替换它们,则正则表达式要简单一些:

\b(A\d\d\d?B\d\d\d?|\d\d\d?|hello)\b\s*


查看完整回答
反对 回复 2021-04-10
  • 2 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信