我有一个特殊字符列表,其中包括^ $ () % . [ ] * + - ?
。我想把%
放在这个特殊字符前面的一个字符串值中。使用正则表达式为特殊字符添加前缀
我需要这个来生成一个Lua脚本来在Redis中使用。
例如Test$String?
必须更改为Test%$String%?
。
有没有办法在C#中使用正则表达式来做到这一点?
我有一个特殊字符列表,其中包括^ $ () % . [ ] * + - ?
。我想把%
放在这个特殊字符前面的一个字符串值中。使用正则表达式为特殊字符添加前缀
我需要这个来生成一个Lua脚本来在Redis中使用。
例如Test$String?
必须更改为Test%$String%?
。
有没有办法在C#中使用正则表达式来做到这一点?
在C#代替,你只需要一个Regex.Replace
:
var LuaEscapedString = Regex.Replace(input, @"[][$^()%.*+?-]", "%$&");
的[][$^()%.*+?-]
字符类将匹配单个字符,或者是]
,[
,$
,^
,(
,)
,%
, .
,*
,+
,?
或-
,并且将以%
字符预先等待的替换模式将其重新插入$&
反向引用。
这里的前瞻只是一个多余的开销(或者是你老板炫耀的招数)。
请参阅[IDEONE演示](http://ideone.com/aufXMp)。 –
你可以使用这个表达式:([\\^$()%.\\[\\]*+\\-?])
它将匹配和字符类中捕捉人物。然后,您可以使用$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);
您可以使用向前看符号与%
/(?=[]*+$?)[(.-])/
(?=[]*+$?)[(.-])
模型正先行更换,检查字符以下任何一个从altenation []
。如果是的话,有%
为什么使用lookahead?以'$&'作为替换模式的反向引用的字符类将会执行。 –
@WiktorStribiżew即使这样。不同的方式来解决同样的问题,我猜。 – nu11p01n73R
您可以使用(?= [\^\ $()\%。[] * + - \?])正则表达式替换字符串为“%”
是的。你有没有看过“Regex.Replace”呢? – yaakov
@codran是的,但我想用自己和%替换每个角色。 'Regex.Replace'可以做到这一点? – Fred
是的。看看[替换](https://msdn.microsoft.com/en-us/library/ewy2t5e0(v = vs.110).aspx)。 – yaakov