删除特殊字符并排除单词

时间:2015-03-26 05:22:55

标签: c# regex

我们需要运行一个处理超过1000000个网址的应用。我不能单独替换段的特殊字符,因为这将是一个缓慢的过程。这就是我需要在一次通话中处理所有网址的原因。

我需要删除网址中的特殊字符(在网址的细分中),问题是这些网段是名称,可以包含/.

当我构建url时,将使用{ - }连接段,然后用/.替换。

var newUrl = RemoveSpecialCharacters(url).Replace("{-}","/")

这是我的正则表达式

(?:(?<!")\{\-\}(?!"))|[^0-9a-zA-Z\s]

此部分获取特殊字符[^ 0-9a-zA-Z \ s]但我无法使表达式忽略{ - }

这是我使用正则表达式

的网址示例

{ - }哈瓦苏湖城{ - }金曼区{ - }哈哈湖/西苏城{ - }北角阅读住宅{ - } hola {* e} s!fsd3 $ ^ gdfg% 代码:

public static string RemoveSpecialCharacters(string input)
{
    Regex r = new Regex("(?:(?<!")\{0\}(?!"))|[^0-9a-zA-Z\s]", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
    return r.Replace(input, " ");
}

结果必须是:

{ - }哈瓦苏湖城{ - }金曼地区{ - } Lake Ha vasu City { - } North Pointe by Read Homes { - } hola e s fsd3 gdfg

3 个答案:

答案 0 :(得分:1)

一种简单的方法是在上下文中使用交替运算符,使用捕获组将要排除的内容放在左侧,以反向引用替换调用内的组,并将要替换的内容放在右侧 - 交替的一面。

String s = "hola !@ew#$%^&er3523wrerffser*()12345678{}#0#word{0}";
String r = Regex.Replace(s, @"(\{0})|[^a-zA-Z0-9\s]+", "$1");
Console.WriteLine(r); //=> "hola ewer3523wrerffser123456780word{0}"

答案 1 :(得分:0)

你的正则表达式:(?:(?<!")\{0\}(?!"))|[^0-9a-zA-Z\s] 你允许0-9,你忽略0?为什么这么困惑? 新正则表达式:(?:(?<!")\(?!"))|[^1-9a-zA-Z\s]

答案 2 :(得分:0)

好像你试图用空字符串替换{0}以外的所有特殊字符。然后你可以试试下面的正则表达式。

replaced = Regex.Replace(yourString, @"(\{0})|[^0-9a-zA-Z\s]", "$1");

这将首先捕获{0}部分,然后根据此[^0-9a-zA-Z\s]模式匹配所有其他字符,即任何字符,但不包括字母数字或空格。

DEMO