如果在给定字符串中找到任何分隔符,我只想替换为 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/