2012-10-12 100 views
2

目標字符串是"A + A_RT + B*A+AA"。我想用BB替換AA。但我不想取代A_RTB_RTAABB。預期的結果是"B + A_RT + A*B+AA"。我怎樣才能在C#中做到這一點?謝謝。正則表達式組替換問題

目前我使用下面的代碼,但它會取代A_RTB_RT ...

IDictionary<string, string> map = new Dictionary<string, string>() 
            { 
             {"A","B"}, 
             {"B","A"}, 
            }; 

string str = "A + A_RT + B*A+AA"; 
var regex = new Regex(String.Join("|", map.Keys)); 
var newStr = regex.Replace(str, m => map[m.Value]); 
+0

您需要使用向後看和向前看,以檢查是否有一個名稱的任何有效的字符。 – nhahtdh

+0

在正則表達式之後追加(?<!\ w)和(?!\ w)以查看它是否有效。 – nhahtdh

回答

2

我改變了正則表達式爲var regex = new Regex(@"\bA\b|\bB\b"),那麼它可以工作。

0

我不是在正則表達式模式特別好,所以有可能是一個更好的方式來做到這一點。但模式

@"([a-zA-Z_]+)" 

能夠抓住所有的變量標記作爲匹配結果。

0

使用var regex = new Regex(String.Format("\\b[{0}]\\b",String.Join("", map.Keys)));