c# - Regex.Replace 不适用于分隔符

标签 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 实现可能会更好。

最佳答案

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

试试这个:

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);
    }
}

关于c# - Regex.Replace 不适用于分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17786032/

相关文章:

c# - 为什么这段代码没有正确执行(视频)?

c# - 正则表达式 : first character alphabet second onward numeric

c# - 这个正则表达式是什么意思 - "\p{Lu}"?

WebURL 的 Javascript 正则表达式

JavaRegEx 和复杂的长字符串

c# - 正则表达式提取引号之间的字符串

c# - Windows 窗体设计器重命名复制/粘贴的控件

c# - 如何在列表框中显示替代对象的表示?

c# - 检查远程文件是否存在

c# - HandleUnauthorizedRequest 未覆盖