2016-05-16 376 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

您可以使用(?= [\^\ $()\%。[] * + - \?])正則表達式替換字符串爲「%」