Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅清除匹配字符串的列表?_C#_Listbox_Data Scrubbing - Fatal编程技术网

C# 如何仅清除匹配字符串的列表?

C# 如何仅清除匹配字符串的列表?,c#,listbox,data-scrubbing,C#,Listbox,Data Scrubbing,我试图创建一个例程,从文本框中获取一个列表,然后使用另一个列表对其进行清理。只有具有匹配文本的字符串将保留。我认为我不能使用正则表达式,因为我不知道清理列表将包含什么。比赛不一定是绝对的。例如: 'ant' from my scrub list would match 'antiques', 'manta', 'ants', etc. 我以为我使用下面的代码是正确的,但是我在最后两行代码下面都出现了红色的曲线。感谢您的帮助: List<string> masterList = ne

我试图创建一个例程,从文本框中获取一个列表,然后使用另一个列表对其进行清理。只有具有匹配文本的字符串将保留。我认为我不能使用正则表达式,因为我不知道清理列表将包含什么。比赛不一定是绝对的。例如:

'ant' from my scrub list would match 'antiques', 'manta', 'ants', etc.
我以为我使用下面的代码是正确的,但是我在最后两行代码下面都出现了红色的曲线。感谢您的帮助:

List<string> masterList = new List<string>(textBox_masterList.Text.Split(','));    
List<string> scrubList = new List<string>(textBox_scrubList.Text.Split(','));
for (int i = 0; i < masterList.Count; i++)
    masterList = masterList.Where(x => x.Contains(scrubList));

我做错了什么?

我手头没有代码,但您可以将每个
列表
转换为
数据表
,然后使用连接。这将导致初始列表被删除。

一种有效且简短的方法是使用
可枚举。除了

masterList = masterList.Except(scrubList).ToList();
如果要使用不需要创建临时列表的
RemoveAll

masterList.RemoveAll(str => scrubList.Contains(str));
因为您想删除
scrubList
中的所有字符串

编辑:使其不区分大小写:

masterList.RemoveAll(str => scrubList.Any(s => s.Equals(str, StringComparison.OrdinalIgnoreCase)));
masterList = masterList.Where(x => scrubList.Any(s => 
                          Regex.IsMatch(x, s, RegexOptions.IgnoreCase)))
                       .ToList();

for语句是无用的,您不使用变量i。

不,这不会检查substrings@lazyberezovsky:不清楚OP是否也希望删除包含“禁止”字符串的字符串,是吗?他提到匹配不一定是绝对的,所以我认为简单的例外无论如何都不适合这里。有没有什么方法可以忽略这个案例呢?再次谢谢你,蒂姆。非常简洁的回答。我喜欢short.What't
masterList.Intersect(scrubList)?这似乎是可行的,但它正在查看案例。有什么方法可以忽略大小写吗?@Jeagr请参阅更新-您可以使用
System.Text.RegularExpressions.Regex
List<string> masterList = new List<string>(textBox_masterList.Text.Split(','));
List<string> scrubList = new List<string>(textBox_scrubList.Text.Split(','));
masterList = masterList.Where(x => scrubList.Any(s => x.Contains(s)))
                       .ToList();
masterList = masterList.Where(x => scrubList.Any(s => 
                          Regex.IsMatch(x, s, RegexOptions.IgnoreCase)))
                       .ToList();