0

基本的に、私はそのような文字列リストを持っています:

/forum/
/phpld/
/php/

今、私はURLのいずれかを確認したい: http://www.url.com/forum/

文字列リストからの任意の値が含まれます。

上記の場合、URL に /forum/ が含まれているため、一致するはずです。

私は次のようなことを考えていました:

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

しかし、上記を正確にすることはできません。どうすればよいですか?:)

4

5 に答える 5

3

これを試して:

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

PAGEURL = PAGEURL.Trim()毎回実行しないように、この式の前に行うことができます。

于 2012-11-30T10:31:38.067 に答える
1

String.Contains() は大文字と小文字を区別し、カルチャを区別しないため、大文字と小文字の違いがある場合、発生している「不正確さ」の原因となる可能性があります。

これが問題であると思われる場合 (または実行可能な代替手段として)、これを 'if' 句として試すことができます。

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

于 2012-11-30T10:39:45.673 に答える
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++;
}
于 2012-11-30T10:42:19.350 に答える
0

ここで何をしたいのかよくわかりませんが、URL にフィルターが含まれている場合は、その URL をリストに追加する必要があるようです。

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

それを使ってみてください。

于 2012-11-30T10:31:53.823 に答える
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));
于 2012-11-30T10:33:12.887 に答える