List.Remove在匹配另一个列表时无法正常工作

时间:2017-06-13 21:56:59

标签: c# asp.net linq

我尝试将网络数据列表编辑为CSV文件,这意味着我需要修剪一些标题等。我制作了一系列字符串我想要删除但它并没有像我一样工作。 这是我的代码:

ng serve

我看到的输出有" Mac"和"地址"删除了,但没有其他人。例如:

"表,----------------------------------------- -

VLAN,端口 ----,-----------,--------,-----"

我在这里不理解什么?

3 个答案:

答案 0 :(得分:2)

您要在空格字符上拆分源数据,而不是在换行符上拆分,因此您可以使用"表\ n -----"哪个不匹配。您需要使用正则表达式来查找要删除的单词,我建议:

string[] unwanted = new[] { "Mac", "Address", "Table", "Vlan", "Type", "Ports" };

textList.RemoveAll(x => unwanted.Any(us => Regex.IsMatch(x, $@"\b{us}\b", RegexOptions.Multiline)));
textList.RemoveAll(x => Regex.IsMatch(x, @"-+|^$", RegexOptions.Multiline));

此外,单个-不会匹配任何内容,因此我添加了一行来删除连字符和空字。

答案 1 :(得分:1)

您正在搜索" --------------------------------------- ----"在[" - "," Mac",...]中并不存在,因此它不会被删除。

因为你用'来调用Split? '你没有得到任何个人破折号。

我认为你需要单独处理破折号,例如:

text = text.Replace("-", string.Empty);

编辑 - 在textList.RemoveAll放置一个断点并查看textList的内容。您会发现,未删除的行不会与不需要的行匹配。

答案 2 :(得分:0)

这可能是区分大小写的问题: 试试这个:

textList.RemoveAll(x => unwanted.Contains(x, StringComparer.OrdinalIgnoreCase));