如何使用RegEx替换字符串中的所有不需要的字符?

时间:2013-02-22 06:34:22

标签: c# .net regex

在c#应用程序中,我需要用“Ô替换所有不需要的字符。以下是允许的字符数组。

string[] wantedCharacters = new string[] { " ", "!", "\"", "#", "$", "%", "&", "\'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~" };

除此之外的所有字符都应使用“Ô替换。我用Loopin完成了所有的字符串字符。但这需要花费太多时间来执行。我正在寻找一个正则表达式来做到这一点。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

我不会使用RegEx,它的可读性会降低。

string input "..";
HashSet<char> wantedCharactersSet = new HashSet<char>(wantedCharacters);
for (int i = 0; i < input.Length; i++)
{
    if (!wantedCharactersSet.Contains(input[i]))
        input[i] = placeholderChar;
}

请注意HashSet<T>.Contains()的性能为O(1),而Array只是n。

答案 1 :(得分:4)

您似乎正在尝试将字符限制为ASCII中的可打印字符(代码为0x20至0x7E的字符)。所以你可以使用这个正则表达式:

[^\x20-\x7E]

正则表达式将匹配所有不需要的字符。

将正则表达式放在文字字符串中:

@"[^\x20-\x7E]"

将此正则表达式与Replace函数一起使用,并替换为空字符串以删除所有不需要的字符,或替换为您选择的某个占位符字符。

答案 2 :(得分:4)

[^c]表示:不是c的所有内容。您应该用允许的字符替换c并使用该正则表达式替换方法:

var reg = new Regex(@"[^ !""#$%&'()*+,-./0-9:;<=>?@A-Z\[\\\]^_`a-z{|}~]");
var result = reg.Replace(inputString, "Ã");