C#代码中!ignore.Any(linkUrl.Contains)逻辑条件不生效排查求助
问题原因排查
以下是导致!ignore.Any(linkUrl.Contains)判断失效的常见原因:
- 读取的关键词带多余空白符:
File.ReadAllLines会完整读取每行的内容,如果你存储关键词的txt文件中存在行首尾空格、制表符、空行,会导致匹配失败。比如关键词行实际是" facebook ",和linkUrl中的"facebook"无法匹配。 - 大小写不匹配:C#默认的
string.Contains是大小写敏感的,如果ignore数组中存储的是"Facebook",而爬取到的链接是"facebook.com",也会出现匹配失败的情况。 - 关键词长度与链接长度冲突:你设置了
linkUrl.Length < 10的过滤条件,如果要排除的关键词本身长度较长(比如facebook长度为8),符合长度条件的链接本身就很难包含这些关键词,容易让你误以为判断逻辑失效。
修复方案
你可以修改判断逻辑,过滤空行、处理首尾空白、忽略大小写匹配:
string[] ignore = File.ReadAllLines(@"logicfiles\[flag]-[ignore-these-links].txt"); var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(rawHtml); foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) { string linkUrl = link.GetAttributeValue("href", string.Empty); // 修改匹配逻辑,兼容空白、大小写问题 bool shouldIgnore = ignore.Any(key => !string.IsNullOrWhiteSpace(key) && linkUrl.Contains(key.Trim(), StringComparison.OrdinalIgnoreCase) ); if (!shouldIgnore && linkUrl.Length < 10 && !linkUrl.StartsWith("/")) { DataGridViewLinks.Rows.Add(linkUrl, keywordUsed, "", "", engineUsed); } }
如果修改后仍然不符合预期,可以加断点查看ignore数组的实际内容,确认文件读取结果是否和你预期的关键词列表一致。
内容的提问来源于stack exchange,提问作者logosapp
相关产品推荐
相关产品推荐

