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

时间:2016-05-16 08:44:10

标签: c# regex

我有一个包含^ $ ( ) % . [ ] * + - ?的特殊字符列表。我想把%放在字符串值中的这个特殊字符前面。

我需要这个来生成在Redis中使用的Lua脚本。

例如,Test$String?必须更改为Test%$String%?

有没有办法在C#中使用正则表达式?

4 个答案:

答案 0 :(得分:3)

在C#中,您只需要一个Regex.Replace

var LuaEscapedString = Regex.Replace(input, @"[][$^()%.*+?-]", "%$&");

请参阅regex demo

[][$^()%.*+?-]字符类将匹配单个字符,][$^(,{ {1}},)%.*+?并将其重新插入{{1使用-字符预先挂起的替换模式中的反向引用。

前瞻只是一个多余的开销(或者是老板的炫耀技巧)。

答案 1 :(得分:2)

您可以使用此正则表达式:([\\^$()%.\\[\\]*+\\-?])

它将匹配并捕获字符类中的字符。然后,您可以使用$1引用捕获的字符并在其前插入%,如下所示:%$1

以下是一个示例代码demo

  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);   

答案 2 :(得分:2)

您可以使用前瞻并替换为%

/(?=[]*+$?)[(.-])/

Regex Demo

  • (?=[]*+$?)[(.-]) Postive lookahead,检查字母[]中是否跟随任何一个字符。如果是,请使用%
  • 替换

答案 3 :(得分:0)

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