我们需要运行一个处理超过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
答案 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]
模式匹配所有其他字符,即任何字符,但不包括字母数字或空格。