2013-11-24 35 views
1

例如有像正則表達式替換凡在比賽前一個字符是不是

string x = "var test1 = $('#test1').val();" 

一個字符串,我想只有test1而不是#test1更換。

C#代碼:

Regex.Replace(x, "[^#]" + @"\btest1\b", "test2"); 

*\b \b = match complete word only 

當我使用[^#]犯規更換#test1,因爲我喜歡,但 var test1成爲:

vartest1 
+0

爲什麼你不想更換'#test1'?那麼'not-test1-test2'呢? – sln

回答

2

嘗試:

Regex.Replace(x, @"(?<!#)\btest1\b", "test2"); 

RegExr Example

你有正確的想法,但你的正則表達式得到擺脫vartest之間的空間的原因是因爲[^#]匹配該空間。

(?<=#)是一個積極向後看,它說看看我的匹配#後面,但不包括它在比賽。

在這種情況下,您可以使用(?<!#),這是一個負反向 - 尋找與#不匹配的東西,並且不要將其包含在匹配中。

+0

謝謝!快速成爲真實!作品! – Zakari

+1

沒問題,補充說明一下。 – OGHaza