我想检查字符串是否包含列表中的单词或数字,并将其从字符串中删除。我想用来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*
- 2 回答
- 0 关注
- 158 浏览
添加回答
举报
0/150
提交
取消