如何用Enumerable.Range创建过滤列表并移除字符串中匹配内容
字符串过滤实现方案(结合Enumerable.Range优化)
嘿,我帮你把这个字符串过滤的需求用更简洁的Linq方式实现了,替代原来的For循环,完全贴合你提到的思路:
需求回顾
我们需要从字符串中移除三类内容:
- 固定关键词:
hello - 数字范围:01-100、000-100(本质是数值0到100的所有字符串形式,含前导零)
- 编码范围:A00B00到A100B100(A后跟0-100数字,B后跟0-100数字的组合)
实现思路
用Enumerable.Range生成所有需要过滤的编码组合,再结合Linq的过滤能力,一次性处理所有符合条件的内容:
完整代码示例
using System; using System.Linq; using System.Collections.Generic; public class StringFilter { public static void Main() { string input = "This is a A05B09 hello 02 100 test"; // 生成AxxBxx格式的过滤列表(覆盖A00B00到A100B100所有组合) var abFilters = Enumerable.Range(0, 101) .SelectMany(a => Enumerable.Range(0, 101) .Select(b => $"A{a}B{b}")); // 固定过滤关键词 var fixedFilters = new List<string> { "hello" }; // 合并为HashSet提升查询效率,支持忽略大小写(可根据需求调整) var allFilters = abFilters.Concat(fixedFilters).ToHashSet(StringComparer.OrdinalIgnoreCase); // 拆分字符串并过滤目标内容 var resultWords = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) .Where(word => !allFilters.Contains(word) && !(int.TryParse(word, out int num) && num >= 0 && num <= 100)); // 拼接为最终结果 string result = string.Join(" ", resultWords); Console.WriteLine(result); // 输出:This is a test } }
代码说明
- AxxBxx编码生成:通过嵌套的
Enumerable.Range生成0到100的数字组合,自动覆盖A05B09、A100B100等所有符合范围的编码。 - 高效过滤集合:用
HashSet存储所有过滤项,比普通列表的查询速度更快,适合多次复用过滤规则处理不同字符串。 - 数字过滤逻辑:通过
int.TryParse自动处理前导零问题,只要字符串能转换为0-100之间的整数,就会被过滤。 - 灵活复用:如果需要调整过滤范围(比如A00B00到A50B50),只需修改
Enumerable.Range的参数;新增固定关键词直接添加到fixedFilters即可。
这样实现不仅简洁易读,而且复用性强,完全满足你用Enumerable.Range创建过滤列表、处理多个不同字符串的需求。
内容的提问来源于stack exchange,提问作者Matt McManis
相关产品推荐
相关产品推荐

