2011-06-27 35 views
1

我需要一些能夠找到用兩個「%」符號括起來的單詞,並將第一個%替換爲[,將第二個%替換爲]C#,使用正則表達式來查找和替換單詞中的某些字符?

因此字符串「這是虛擬文本%和%百分號」 然後它會使其「這是虛擬文本[有]百分號」

編輯:會不會有搜索的方式和在同一個正則表達式中替換兩個不同的東西?就像我需要用[blah]替換%blah%,而用[〜dp1]替換%〜dp1,%〜dp1調用格式爲%〜(這裏可能是一些字母)(總是以單個數字結尾,知道通話結束)對不起,這是最後一件事:)

+1

該字符串'%%%'的輸出應該是什麼? – mcabral

回答

5

我會匹配由特殊字符包圍的整個子字符串,並用包含相同的內部字符但括號而不是百分號的字符串替換它。請確保您使用nongreedy匹配,如果輸入可以有很多這樣子的:

Regex.Replace("This is dummy text %with% percent signs", "%(.*?)%", @"[$1]"); 
+0

由於OP在兩個%之間指定了一個「單詞」,他可能會替換。*?與\ S +(一個或多個非空白字符),即「%(\ S +)%」 –

+0

該代碼不會編譯,因爲'\ ['不是c#字符串中已識別的轉義序列。 – svick

+0

@svick - 你是對的;我將@改爲逐字串,應該正確地將其轉義。 \ [在正則表達式中仍然有效;它表示一個文字開放方括號,而不是一個字符分組結構。 – KeithS

2

試試這個:

Regex.Replace(s, "%([^%]+)%", "[$1]") 
0

使用MatchEvaluator提供替換值。替代(i++ % 2)

int i = 0; 
Regex.Replace(s, "%", m => (i++ % 2) == 0 ? "[" : "]"); 
相關問題