Regex.Replace不使用分隔符

时间:2013-07-22 11:07:53

标签: c# regex

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

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

Regex.Replace()适用于模式,而非分隔符。您将其与String.Replace()混淆。

String.Replace(source,“ - ”,string.empty)可以工作,但每个字符需要运行一次。 Regex.Replace(source,pattern,string.empty)可以更好地工作,但你需要使用RegEx pattern,而不是简单列出字符。