我会将段过滤器更改为简单的单词(没有斜线,在添加到过滤器列表之前修剪):
var _filterList = new List<string>()
{
"forum", "phpld", "php"
};
并使用正则表达式搜索 url 中的段(忽略大小写,url 末尾的可选斜杠)
bool IsSegmentInUrl(string url, string segment)
{
string pattern = String.Format(".*/{0}(/|$)", segment);
return Regex.IsMatch(url, pattern, RegexOptions.IgnoreCase);
}
用法:
if (_filterList.Any(filter => IsSegmentInUrl(PAGEURL, filter))
{
_parseResultsFinal.Add(PAGEURL);
filteredByURL++;
}
更具可读性的解决方案 - 创建扩展方法
public static bool ContainsSegment(this string url, string segment)
{
string pattern = String.Format("http://.*/{0}(/|$)", segment);
return Regex.IsMatch(url, pattern, RegexOptions.IgnoreCase);
}
现在代码看起来非常自描述:
if (_filterList.Any(filter => PAGEURL.ContainsSegment(filter))
{
_parseResultsFinal.Add(PAGEURL);
filteredByURL++;
}