我们需要运行一个应用程序,将处理超过1000000个网址。我不能以单独的方式替换段中的特殊字符,因为这将是一个缓慢的过程。这就是为什么我需要在一个调用中处理所有的url。
我需要删除url中的特殊字符(在url的片段中),问题是这些片段是名称,可以包含/。
当我构建时,url将用{-}连接这些段,然后用/替换。
var newUrl = RemoveSpecialCharacters(url).Replace("{-}","/")这是我的Regex
(?:(?<!")\{\-\}(?!"))|[^0-9a-zA-Z\s]此部分获取特殊字符^0-9a-zA-Z\s,但我不能使表达式忽略{-}
这是我在Regex中使用的url示例。
{-}哈瓦苏湖城市{-}金曼地区{-}哈湖/瓦苏市{-}北角-by-Read家{-}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, " ");
}结果必须是:
发布于 2015-03-26 13:33:06
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}"发布于 2015-03-26 13:27:10
您的正则表达式:(?:(?<!")\{0\}(?!"))|[^0-9a-zA-Z\s]您允许0-9,而忽略0?为什么这么困惑?新的正则表达式:(?:(?<!")\(?!"))|[^1-9a-zA-Z\s]
发布于 2015-03-26 13:32:20
似乎您正在尝试将{0}以外的所有特殊字符替换为空字符串。然后你可以尝试下面的正则表达式。
replaced = Regex.Replace(yourString, @"(\{0})|[^0-9a-zA-Z\s]", "$1");这将首先捕获{0}部分,然后根据此[^0-9a-zA-Z\s]模式匹配所有其他字符,即任何字符,但不是字母数字或空格。
https://stackoverflow.com/questions/29271600
复制相似问题