使用正则表达式为特殊字符添加前缀

4
我有一个特殊字符列表,包括^ $ ( ) % . [ ] * + - ?。我想在字符串值中在这些特殊字符前加上%
我需要用它来生成一个在Redis中使用的Lua脚本。
例如Test$String?必须更改为Test%$String%?
有没有办法在C#中使用正则表达式实现这个功能?

是的,有。您是否已经研究过 Regex.Replace 了? - yaakov
@codran 是的,但我想用自己和%替换每个字符。Regex.Replace可以做到这一点吗? - Fred
2
请查看 替换 - yaakov
4个回答

4
在C#中,你只需要使用Regex.Replace函数:
var LuaEscapedString = Regex.Replace(input, @"[][$^()%.*+?-]", "%$&");

请查看正则表达式演示[][$^()%.*+?-]字符类将匹配一个字符,可以是][$^()%.*+?-。在替换模式中,使用$&反向引用,并在前面加上一个%字符。
此处前瞻只是多余的开销(或老板的炫耀技巧)。

2
您可以使用此正则表达式:([\\^$()%.\\[\\]*+\\-?])。它将匹配并捕获字符类中的字符。然后,您可以使用$1引用捕获的字符,并在其前面插入%,如下所示:%$1
这是一个示例代码和演示
  string input = "Test$String?";
  string pattern = "([\\^$()%.\\[\\]*+\\-?])";
  string replacement = "%$1";
  Regex rgx = new Regex(pattern);
  string result = rgx.Replace(input, replacement);

  Console.WriteLine("Original String: {0}", input);
  Console.WriteLine("Replacement String: {0}", result);   

1
\W将匹配任何非单词字符,而不仅仅是Lua特殊模式字符。 - Wiktor Stribiżew
1
这也将替换问题中未指定的“:”、“;”或“{”。 - nu11p01n73R
@lbarros 当我使用 %$1 时,特殊字符被替换为 %$1。我使用 %$& 替代 %$1,你的答案正常工作。 - Fred
1
@Fred 你使用了捕获组吗?如果没有,我认为 %$& 是正确的选择。 - Lucas Araujo
@lbarros 你说得对,我忘记在我的模式周围使用圆括号了。 - Fred

2
你可以使用前瞻并替换为%
/(?=[]*+$?)[(.-])/

正则表达式演示

  • (?=[]*+$?)[(.-]) 正向先行断言,检查交替项[]后面的字符。如果是,则用%替换。

为什么要使用前瞻?在替换模式中带有“$&”作为反向引用的字符类即可。 - Wiktor Stribiżew
@WiktorStribiżew 即使那样也可以。我猜这是解决同一个问题的不同方法。 - nu11p01n73R

0

你可以使用 (?=[\^\$()\%.[]*+-\?]) 正则表达式替换字符串为“%”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接