仅用1个空格替换非字母数字字符和多个空格

时间:2015-03-19 01:48:22

标签: c# regex

我试图替换所有"非字母数字字符"和#34;多个空格"只有一个单一的空间

我有2个工作解决方案,但是我想知道是否可以有效地将它们组合起来?

鉴于

var str = "ASD S-DF 2134 4@# 4    234234 #$)(u SD";
var options = RegexOptions.None;

解决非字母数字字符

var rgxAlpha = new Regex("[^a-zA-Z0-9]");
str = rgxAlpha.Replace(str, " ", options);

解决多个空格

var regexSpace = new Regex(@"[ ]{2,}", options);
str = regexSpace.Replace(str, " ");

预期结果

ASD S DF 2134 4 4 234234 u SD

3 个答案:

答案 0 :(得分:5)

只需以下即可,因为[^a-zA-Z0-9]+也与空格匹配,您无需明确添加[ ]{2,}

string result = Regex.Replace(str, @"[^a-zA-Z0-9]+", " ");

DEMO

答案 1 :(得分:2)

假设它们都有效:

var rgxPattern = new Regex(@"[^a-zA-Z0-9]+|[ ]{2,}");

只需添加|他们之间。

答案 2 :(得分:0)

    string szOut= "";
    char previous;
    foreach (char cr in str.ToCharArray())
    {
            if(cr == ' '&& previous == ' ')
                continue;

            if (IsAlphaNumeric(cr))
                szOut+= cr;

            previous = cr;
    }       
    return szOut;

...

    public static Boolean IsAlphaNumeric(char cr)
    {
        return char.IsLetter(cr) || char.IsNumber(cr) || cr == ' ';
    }