正则表达式删除大于指定计数的连续特殊字符

时间:2013-11-01 05:19:49

标签: c# .net regex

我想删除字符串中/\的所有外观,如果它使用正则表达式连续出现两次以上。这意味着,如果字符串包含abc////////////////////////def,我希望删除所有/。但是,它不应删除/中的http://

有人可以建议吗?

2 个答案:

答案 0 :(得分:3)

您可以使用/{3,},它会匹配3个或更多/个字符。

var result = Regex.Replace("abc///def", "/{3,}", "");

更新:要回复您的评论,*字符是正则表达式中的元字符,具有特殊含义,因此您需要将其转义。试试这个:\*{3,}。如果要组合两个字符,可以使用字符类:[/*]{3,}。字符类用方括号表示。在一个字符类中你不需要转义元字符,这就是为什么我只是在里面列出*而不像我之前那样转义它。

答案 1 :(得分:0)

使用negative look-behind assertion

@"(?<!https?:)/{2,}|\\{2,}"

例如:

Regex pattern = new Regex(@"(?<!https?:)/{2,}|\\{2,}");
Console.WriteLine(pattern.Replace(@"http://example.com", ""));
Console.WriteLine(pattern.Replace(@"abc//////////def", ""));
Console.WriteLine(pattern.Replace(@"abc\\\\\\\\\\def", ""));

打印

http://example.com
abcdef
abcdef