2012-01-10 14 views
2

文字列の完全一致の件数を検索したい 文字列が「マイコンピュータ」であるとします。HTMLファイル内の文字列の正確な出現を確認

、だから、最後に、私は2カウント得るもの、これは私のコンピュータ

で、これは私のコンピュータで私はそれを見つけたい、sの文字列の出現

は、これは私のコンピュータであり、これは良いコンピュータで、

「mykeyWord」という文字列を次の式で検索しようとしました。

int strength = (innerDocument.DocumentNode.InnerText.Length - innerDocument.DocumentNode.InnerText.ToLower().Replace(mykeyWord.ToLower(), "").Length)/mykeyWord.Length; 

しかし、「マイコンピュータ」のような文字列も間違っています。

答えて

4

これはあなたの記事をタグ付けと同じように、正規表現を使用するのに最適な場所です。

Regex re = new Regex("\\b" + Regex.Escape(mykeyWord) + "\\b", RegexOptions.IgnoreCase); 
int count = re.Matches(innerDocument.DocumentNode.InnerText).Count; 
+0

この正規表現のパターンを説明してください。 –

+0

@ZainAli: '\ b'は単語の境界、つまり単語でないものに一致します。句読点、スペースなど。エスケープされたキーワードをその間に挟み込んで一致させます。 – Ryan

1

あなたはそれが前または「の後だ場合、これは「マイコンピュータ」を一致するではなく、正規表現[^A-z](my computer)[^A-z]を使用することができます〜Z 'となる。正規表現検索で大文字小文字を区別しないようにするには、RegexOptions.IgnoreCaseを使用します。

minitechさんの答えは単語境界を使用する方が良いです。

1
int FindCount(string keyword, string input) 
    { 
     if (input.Contains(keyword)) 
     { 
      int count = 0; 
      int i = 0; 
      foreach (var c in input) 
      { 
       if (c == keyword[i]) 
        i++; 
       else 
        i = 0; 
       if (i == keyword.Length) 
       { 
        i = 0; 
        count++; 
       } 
      } 
      return count; 
     } 

     return 0; 
    } 
関連する問題