2012-01-03 69 views
2

當我打電話替換在C#中的所有功能的特殊字符

Regex.Replace(
    "My [Replace] text and another [Replace]", 
    "[Replace]", 
    "NewText", 
    RegexOptions.IgnoreCase) 

這給我下面的結果我不知道爲什麼它是給人意想不到的結果。

我[NewTextNewTextNewTextNewTextNewTextNewTextNewText] tNewTextxt NewTextnd NewTextnothNewTextNewText [NewTextNewTextNewTextNewTextNewTextNewTextNewText]

我怎樣才能改變這樣的正則表達式的結果可能是這樣的。

我NewText文字和另一NewText

+6

爲什麼不只是使用String。如果您沒有使用RegEx的功能,請更換?如果它是不區分大小寫的替換你需要的,請參閱http://www.codeproject.com/KB/string/fastestcscaseinsstringrep.aspx – hatchet 2012-01-03 20:02:10

+0

Accepte答案,如果它適合你 – 2012-01-04 14:23:02

回答

5

[]在RegEx中有特殊含義;它可以讓你指定一個匹配字符/字符類的'列表'。你需要逃避它,使其工作像您期望:

"\\[Replace\\]" 

雙回斜線在這裏使用,因爲首先是要逃避C#的斜線,那麼第二個逃脫它的正則表達式。

這是當前的正則表達式基本上是這樣做的:匹配其中任意字符:R, e, p, l, a, c, e

這就是爲什麼你看到你的NewText重複7次,背到後面,方括號在開始你的結果文本。也就是用NewText簡單地替換這7個字符中的任何一個。

轉義[]消除了特殊的含義,因此您可以直接匹配,也可以完全匹配您希望匹配的內容。

+0

我也會迴應評論/回答的效果,在這種情況下,簡單的'String.Replace()'會更簡單。當你有這樣簡單而又簡單的替換時,使用它更容易,沒有可變模式匹配。 – 2012-01-03 20:09:05

2

其更好地利用String.Replace,而不是正則表達式...........

string errString = "This docment uses 3 other docments to docment the docmentation"; 

     Console.WriteLine("The original string is:{0}'{1}'{0}", Environment.NewLine, errString); 

     // Correct the spelling of "document". 

     string correctString = errString.Replace("docment", "document"); 

     Console.WriteLine("After correcting the string, the result is:{0}'{1}'", 
       Environment.NewLine, correctString); 
1

那是因爲你與你的替換文本替換字符集的每一次出現。改變你的電話:

Regex.Replace(
    "My [Replace] text and another [Replace]", 
    @"\[Replace\]", 
    "NewText", 
    RegexOptions.IgnoreCase) 

它應該像你期望的那樣工作。但是正則表達式很複雜,所以一個簡單的「string.Replace」會更適合你!

+0

你需要用@作爲你的匹配文本的前綴,你需要轉義\ for C# – 2012-01-03 20:17:40

+1

@AnthonyShaw:你是對的,我已經改變了樣本。謝謝! – Fischermaen 2012-01-03 20:32:13

1

我想你想要這個:

Regex.Replace(
    @"My [Replace] text and another [Replace]", 
    @"\[Replace\]", 
    "NewText", 
    RegexOptions.IgnoreCase) 

這樣一來,[替換]作爲文字處理。

0
Regex.Replace(text, @"(\[Replace\])", replacementText); 

這是告訴替換通過使用()並替換'['替換']'找到一個匹配並交換出替換文本。