C#中的正则表达式过滤器

Lin*_*ell 3 c# regex

我正在为消息创建一种过滤器,但实际上替换了部分单词时遇到了一些麻烦.

在查看了这个问题之后,我尝试的几乎就像他们一样.但是,我想使用多个可能的单词进行过滤,我希望每个单词都有不同的东西可以更改.字典似乎对此非常有用.但是,它不起作用.

        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);
        }
Run Code Online (Sandbox Code Playgroud)

我没有看到任何真正的错误的代码,但它实际上并没有更换任何话,我难倒就如何解决它.

das*_*ght 6

我在这段代码中看到的两个问题是,它以区分大小写的方式处理消息,并且错过@了第二个"\b"文字的前面,创建"\b"了一个退格键,而不是一个单词结束标记.

尝试更换

Regex r = new Regex(@"\b" + word.Key + "\b");
Run Code Online (Sandbox Code Playgroud)

Regex r = new Regex(@"\b" + word.Key + @"\b", RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)

你的其余代码应该可以正常工作.

您可能希望通过编译正则表达式来优化代码.另外,既然filterWords不是真的Dictionary,你可能想要使用List<Tuple<Regex,string>>.