查看字符串列表中的项是否包含特定字符串

时间:2012-11-30 10:26:55

标签: c# string

基本上我有一个字符串列表:

/forum/
/phpld/
/php/

现在我想检查是否有任何网址: http://www.url.com/forum/

包含字符串列表中的任何值。

在上述情况下,它应匹配,因为/ forum /位于网址中。

我在想这样的事情:

foreach (string filter in _filterList)
{
    if (PAGEURL.Trim().Contains(filter.Trim()))
    {
        _parseResultsFinal.Add(PAGEURL);
        filteredByURL++;
        break;
    }
}

但我不能让上述内容准确无误 我该怎么办? :)

5 个答案:

答案 0 :(得分:3)

试试这个:

_filterList.Any(filter => PAGEURL.Trim().Contains(filter.Trim()));

您可以在此表达式之前执行PAGEURL = PAGEURL.Trim(),以便每次都不运行它。

答案 1 :(得分:1)

String.Contains()区分大小写且对文化不敏感,因此如果有任何案例差异可能导致您遇到“不准确”。

如果您怀疑这可能是问题(或者甚至是可行的替代方案),您可以尝试将其作为'if'子句:

if (PAGEURL.Trim().IndexOf(filter.Trim(), StringComparison.OrdinalIgnoreCase) >= 0)

答案 2 :(得分:0)

我不清楚你想在这里做什么,似乎如果一个URL包含任何过滤器,那么你想将URL添加到列表中。

List<string> parseResultsFinal = new List<string>();
if (_filterList.Any(x => PAGEURL.Contains(x))
{
   parseResultsFinal.Add(PAGEURL);
}

尝试使用它。

答案 3 :(得分:0)

我会尝试以下方法:

var trimmedUrl = PageURL.Replace("http://", "");
var parts = trimmedUrl.Split("/");

var filterList = new List<string> { "forum", "phpld", "php" }

var anyContains = parts.Any(o => filterList.contains(o));

答案 4 :(得分:0)

我将段过滤器更改为简单的单词(在添加到过滤器列表之前没有斜线,修剪):

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++;
}