用一个空格替换非字母数字字符和多个空格。

3

我正在尝试将所有“非字母数字字符”和“多个空格”替换为一个单独的空格。

我有两个可行的解决方案,但我想知道是否可能有效地将它们结合起来?

假设

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个回答

6

由于[^a-zA-Z0-9]+也可以匹配空格,因此只需要以下内容即可。您无需显式添加[ ]{2,}

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

DEMO


2
假设它们都正常工作:
var rgxPattern = new Regex(@"[^a-zA-Z0-9]+|[ ]{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 == ' ';
    }

这是我会使用的一个简单代码模式。为了获得最佳性能,请直接使用char[]并根据需要添加字符,然后执行String(array)。 - Gary Kaizer
你不需要调用ToCharArray()。 - abatishchev

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