2012-04-25 66 views
0

所以我有一個很長的字符串,我有「保留字」,我需要從數據庫中取代它們的值。c#正則表達式替換動態匹配的問題?

eg. 

string text = "You're salary for the month of ((month)) is ((salary)) 

現在我所做的就是滿足每一個保留字,然後通過我的數據集搜索,然後替換那些與他們的價值

Regex ex = new Regex(@"(?<=\(\().*?(?=\)\))"); 
foreach(Match match in ex.Matches(body)){   
       string valuefromset = values.FirstOrDefault(val => val.Variable == match.Value).Value; 
        var pattern = @"(("+match.Value+"))"; 
        body = Regex.Replace(body, pattern, valuefromset, RegexOptions.IgnoreCase); 
       } 
      } 

現在發生的事情是這樣的

text = "You're salary for the month of ((April)) is (($10000))"; 

我不確定爲什麼模式只會得到單詞而不是標籤。我應該使用另一個正則表達式,但具有特定的值嗎?具有特定的保留字在這種模式中是重要的,這就是爲什麼我使用它的原因,我不確定我在做什麼。

任何幫助表示讚賞。謝謝!!!

+0

沒有什麼直接的關係,但你應該使用的「你」,而不是「你」。 – Shimrod 2012-04-25 13:16:50

+1

未知令牌(保留字)是否存在於字符串中?有很多潛在的令牌嗎?看起來好像使用StringBuilder的.Replace方法會更高效,更簡單。 – MyItchyChin 2012-04-25 13:38:09

回答

4

那是因爲你沒有逃跑的斜線在更換正則表達式

var pattern = @"(("+match.Value+"))"; 
       ^^    ^^ 

你是不匹配他們,你創建兩個組。試試這個:

var pattern = @"\(\("+match.Value+"\)\)"; 
+0

也試過這個。同樣的事情 – gdubs 2012-04-25 13:24:22

+0

哦,我的壞它確實工作!一世;正在做一個字符串模式,並且當我完成關閉時,給了我一個「無法識別的轉義」錯誤。謝謝!! – gdubs 2012-04-25 13:26:56