我想检查字符串是否包含列表中的单词或数字,并将其从字符串中删除。
我想使用SparkContext
创建过滤器列表,并使用它来过滤许多不同的字符串。
我试图结合两个先前的答案:
https://stackoverflow.com/a/49733139/6806643
https://stackoverflow.com/a/49740832/6806643
我要过滤的句子:
这是A05B09问候02 100测试
过滤
Enumerable.Range()
,A00B00-A100B100
,01-100
,000-100
应阅读:
这是一个测试
旧方式
hello
- 工作
http://rextester.com/BJL70824
新方式
For Loop
- 不起作用
http://rextester.com/ZSCM64375
C#
Enumerable Range List
答案 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*
假设您不想替换A101B101
或123
等内容。
如果你想要替换它们,正则表达式有点简单:
\b(A\d\d\d?B\d\d\d?|\d\d\d?|hello)\b\s*