检查String是否包含Enumerable.Range过滤器列表中的匹配项

时间:2018-04-09 22:24:40

标签: c# arrays list

我想检查字符串是否包含列表中的单词或数字,并将其从字符串中删除。

我想使用SparkContext创建过滤器列表,并使用它来过滤许多不同的字符串。

我试图结合两个先前的答案:
https://stackoverflow.com/a/49733139/6806643
https://stackoverflow.com/a/49740832/6806643

我要过滤的句子:

  

这是A05B09问候02 100测试

过滤

Enumerable.Range()A00B00-A100B10001-100000-100

应阅读:

  

这是一个测试

旧方式
hello - 工作
http://rextester.com/BJL70824

新方式
For Loop - 不起作用 http://rextester.com/ZSCM64375

C#

Enumerable Range List

2 个答案:

答案 0 :(得分:1)

您的此行似乎不符合您的要求。.SelectMany(a => Enumerable.Range(0, 101).Select(b => "A{0:00}B{1:00}"))

你能试试这个Linq吗?

List<string> filters = Enumerable.Range(0, 101)
                                 .SelectMany(a => Enumerable.Range(0, 101).Select(b => $"A{a:00}B{b:00}"))
                                 .Union(Enumerable.Range(0, 101).Select(b => $"{b:000}"))
                                 .Union(Enumerable.Range(0, 101).Select(b => $"{b:00}"))
                                 .Union(new List<string> {"hello"})
                                 .ToList();

此版本可以在rextester上为您提供预期结果

List<string> filters = Enumerable.Range(0, 101)
                                 .SelectMany(a => Enumerable.Range(0, 101).Select(b => string.Format("A{0:00}B{1:00}", a, b)))
                                 .Union(Enumerable.Range(0, 101).Select(b => string.Format("{0:000}", b)))
                                 .Union(Enumerable.Range(0, 101).Select(b => string.Format("{0:00}", b)))
                                 .Union(new List<string> { "hello" })
                                 .ToList();

答案 1 :(得分:1)

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

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

假设您不想替换A101B101123等内容。

如果你想要替换它们,正则表达式有点简单:

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