猿问

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

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


我想用来Enumerable.Range()创建过滤器列表,并用它来过滤许多不同的字符串。


我试图结合之前的两个答案:

https : //stackoverflow.com/a/49733139/6806643

https://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/ZSCM64375


C#


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>();


// Sentence

string sentence = "This is a A05B09 hello 02 100 test";

string newSentence = string.Empty;



// Find Matches

for (int i = 0; i < filters.Count; i++)

{

    // Add to Matches List

    if (sentence.Contains(filters[i].ToString()))

    {

        matches.Add(filters[i]);

    }

}


// Filter Sentence

newSentence = Regex.Replace(

    sentence

,   @"(?<!\S)(" + string.Join("|", matches) + @")(?!\S)"

,   ""

,   RegexOptions.IgnoreCase

);


// Display New Sentence

Console.WriteLine(newSentence);


www说
浏览 159回答 2
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*
随时随地看视频慕课网APP
我要回答