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

我需要删除url中的特殊字符(在url的段中),问题是该段是名称,可以包含/。

当我构建url时,会将段与{-}串联起来,稍后将其替换为/。

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


这是我的正则表达式

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


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

这是我与正则表达式一起使用的url的示例

{-}哈瓦苏湖城{-}金曼地区{-}哈瓦斯湖/瓦苏城{-}北Point-by-Reading Homes {-}霍拉{* 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, " ");
}


结果必须是:

{-}哈瓦苏湖城{-}金曼地区{-}哈瓦苏湖城{-}北角Point by Read Homes {-}霍拉·埃斯法斯特3 gdfg

最佳答案

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

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}"

关于c# - 删除特殊字符并排除单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29271600/

10-13 08:00