正则表达式:除允许字符外,如何删除所有内容?

8
如果我有一个字符串,例如'xktzMnTdMaaM',如何删除除了'M'和'T'以外的所有字符 - 使得结果字符串为 'MTMM'?提前致谢。

5
你尝试过任何事情吗? - BoltClock
3个回答

22
var input = "xktzMnTdMaaM";
var output = Regex.Replace(input, "[^MT]", string.Empty);

如果你想要不区分大小写:

var output = Regex.Replace(input, "[^mt]", string.Empty, RegexOptions.IgnoreCase);

+1给第一个解决方案,但我非常确定正则表达式必须区分大小写。否则预期的结果应该是“tMTMM”。 - Alan Moore

0
补充Darin的回答,如果你想的话,你可以使用LINQ来不同地解决这个问题:
string.Concat("xktzMnTdMaaM".Where(c => "MT".Contains(c)))

这很好用,但请注意,您的函数将为“xktzMnTdMaaM”中的每个字符生成字符串“MT”。这会非常慢。不过,您可以通过使用内部化来提高效率。 - DanielOfTaebl
字面字符串已经被内部化,所以这是可以的。 - Paul Walls

0

从您的问题描述来看,使用正则表达式似乎有些过度。您可以手动编写一个解决方案,如下所示:

    public static string RemoveNonMTChars(string str)
    {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] == 'M' && str[i] == 'T')
            {
                sb.Append(str[i]);
            }
        }

        return sb.ToString();
    }

使用正则表达式有什么不利之处吗? - Simply G.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接