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
实现,可能会更好。
使用正则表达式时,某些字符具有特定含义。点表示"任何字符",短划线表示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模式,而不是简单地列出字符。