Regex.Replace无法使用分隔符

本文关键字:分隔符 Replace Regex | 更新日期: 2023-09-27 18:24:17

如果在给定字符串中找到任何分隔符,我只想用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实现,可能会更好。

Regex.Replace无法使用分隔符

使用正则表达式时,某些字符具有特定含义。点表示"任何字符",短划线表示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中进行了测试,结果不出所料。它是regex dev:的一个很好的工具

  • http://www.ultrapico.com/Expresso.htm

(忽略糟糕的网站设计,这是一个很好的实用诚实: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);
    }
}

Regex.Replace()适用于模式,而不是分隔符。你把它和String.Replace().混淆了

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