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

我在这段代码中看到的两个问题是它对消息的处理区分大小写,并且您错过了第二个文字@前面的,产生了退格,而不是词尾标记。"\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 回答