2016-05-16 381 views
4

我有一个特殊字符列表,其中包括^ $ () % . [ ] * + - ?。我想把%放在这个特殊字符前面的一个字符串值中。使用正则表达式为特殊字符添加前缀

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

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

有没有办法在C#中使用正则表达式来做到这一点?

+0

是的。你有没有看过“Regex.Replace”呢? – yaakov

+0

@codran是的,但我想用自己和%替换每个角色。 'Regex.Replace'可以做到这一点? – Fred

+2

是的。看看[替换](https://msdn.microsoft.com/en-us/library/ewy2t5e0(v = vs.110).aspx)。 – yaakov

回答

2

在C#代替,你只需要一个Regex.Replace

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

regex demo

[][$^()%.*+?-]字符类将匹配单个字符,或者是][$,^,(,),%, .*,+,?-,并且将以%字符预先等待的替换模式将其重新插入$&反向引用。

这里的前瞻只是一个多余的开销(或者是你老板炫耀的招数)。

+0

请参阅[IDEONE演示](http://ideone.com/aufXMp)。 –

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

'\ W'将匹配任何非单词字符,而不仅仅是那些Lua特殊模式字符。 –

+1

这也将替换问题 – nu11p01n73R

+0

中未指定的':'或';'或'{'回答更新。 –

2

您可以使用向前看符号与%

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

Regex Demo

  • (?=[]*+$?)[(.-])模型正先行更换,检查字符以下任何一个从altenation []。如果是的话,有%
+0

为什么使用lookahead?以'$&'作为替换模式的反向引用的字符类将会执行。 –

+0

@WiktorStribiżew即使这样。不同的方式来解决同样的问题,我猜。 – nu11p01n73R

0

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