3

メッセージの一種のフィルターを作成していますが、単語の一部を実際に置き換えるときに問題が発生します。

この質問に目を通した後、私は彼らがやったのとほぼ同じようにやろうとしました. ただし、フィルタリングする可能性のある複数の単語を使用して作業したいので、それぞれに異なるものを変更したいと考えています。これには辞書が最適に機能するようです。しかし、うまくいきません。

        Dictionary<string, string> filterWords = new Dictionary<string, string>
        {
            {"lol", "LAUGH OUT LOUD"},
            {"wtf", "WOW THAT'S FANTASTIC"},
        };

        foreach (KeyValuePair<string, string> word in filterWords)
        {
            Regex r = new Regex(@"\b" + word.Key + "\b");
            message = r.Replace(message, word.Value);
        }

コードに実際に問題があるとは思いませんが、実際には単語を置き換えるものではなく、修正方法について困惑しています。

4

1 に答える 1

6

このコードで見られる 2 つの問題は、メッセージを大文字と小文字を区別して処理することと、2 番目のリテラル@の前に置き忘れて、単語の終わりマーカーではなくバックスペースを作成することです。"\b""\b"

交換してみる

Regex r = new Regex(@"\b" + word.Key + "\b");

Regex r = new Regex(@"\b" + word.Key + @"\b", RegexOptions.IgnoreCase);

コードの残りの部分は正常に動作するはずです。

正規表現をコンパイルするごとに、コードを少し最適化することができます。さらに、filterWordsは実際には ではないためDictionary、 を使用することもできますList<Tuple<Regex,string>>

于 2013-07-11T19:26:33.740 に答える