如果在给定字符串中找到任何分隔符,我只想替换为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 :(得分: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,而不是简单列出字符。