2

String.Empty如果在给定字符串中找到任何分隔符,我只想替换。

class Program
{
    private const string Separators = "-(). ";
    static void Main(string[] args)
    {
        var number = Format("88 88-88)8.8(88");
    }

    public static string Format(string number)
    {
        return Regex.Replace(number, Separators, string.Empty);
    }
}

预期是:8888888888但是是88 88-88)8.8(88。我在这里错过了什么吗?

编辑:如果使用

Separators.ToCharArray().ToList().ForEach(c => { number = number.Replace(c.ToString(), string.Empty);});

有用。但如果我用Regex.Replace.

4

2 回答 2

3

当您使用正则表达式时,某些字符具有某些含义。点表示“任何字符”,破折号表示范围为 0-9。我已经对字符进行了转义并将它们放入字符集 [] 中,这意味着“此集中的任何一个”。我还重命名了您的Separators变量以更好地反映它现在的状态。

试试这个:

class Program
{
    private const string SeparatorsRegex = @"[\-()\. ]";
    static void Main(string[] args)
    {
        var number = Format("88 88-88)8.8(88");
    }

    public static string Format(string number)
    {
        return Regex.Replace(number, SeparatorsRegex, string.Empty);
    }
}

在 Expresso 中对其进行了测试,并且按预期工作。它是正则表达式开发的绝佳工具:

(忽略糟糕的网站设计,这是一个很好的实用工具:P)

进一步说明,如果您只想删除不是数字的所有内容,那么您实际上可以使用它:

class Program
{
    private const string StripNonNumbersRegex = @"[^\d]";
    static void Main(string[] args)
    {
        var number = Format("88 88-88)8.8(88");
    }

    public static string Format(string number)
    {
        return Regex.Replace(number, StripNonNumbersRegex, string.Empty);
    }
}
于 2013-07-22T11:28:07.090 回答
1

Regex.Replace()适用于模式,而不是分隔符。您将它与String.Replace()混淆了。

String.Replace(source, "-", string.empty) 将起作用,但您需要每个字符运行一次。Regex.Replace(source, pattern, string.empty) 会更好,但您需要使用RegEx 模式,而不是简单地列出字符。

于 2013-07-22T11:11:36.883 回答