C#中的Regex筛选器

本文关键字:筛选 Regex 中的 | 更新日期: 2023-09-27 18:22:11

我正在为消息创建一种过滤器,但在实际替换单词的部分时遇到了一些问题。

看完这个问题后,我试着和他们一样做。然而,我想使用多个可能的单词进行过滤,并且我希望每个单词都有不同的内容可以更改。字典似乎非常适合这一点。然而,它不起作用。

        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);
        }

我看不出代码中有任何真正的错误,但它实际上并没有替换任何单词,我不知道如何修复它。

C#中的Regex筛选器

我看到的这段代码的两个问题是,它敏感地处理消息大小写,并且您错过了第二个"'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>>