2013-05-02 44 views
2

所以我試圖取代@theplace@theplaces使用正則表達式模式一樣喜歡一句話:替換整個單詞使用C#正則表達式的象徵

String Pattern = string.Format(@"\b{0}\b", PlaceName); 

但是當我做了更換,但沒有找到模式,我猜這是問題的@符號。

有人可以告訴我我需要做的正則表達式模式,以使其工作?

+0

所以'PlaceName'包含'@ theplace'? – nhahtdh 2013-05-02 14:22:01

+0

爲什麼在這種情況下正則表達式,而不是string.replace? – 2013-05-02 14:25:14

+0

@BryanCrosby:由於字符串替換不能區分'@ a'和'@ aplace'?不過,我不太瞭解他的問題。 – nhahtdh 2013-05-02 14:26:31

回答

2

您的問題*是\b(字邊界)@之前。在空間和@之間沒有字邊界。

您可以將其刪除,或將其替換爲非邊界,即大寫B

string Pattern = string.Format(@"\B{0}\b", PlaceName); 

*假設PlaceName開始@

+0

工作,Thx肯德爾 – JeffreyJ 2013-05-02 17:00:55

4

以下代碼將替換@thepalace@thepalaces<replacement>的任何實例。

var result = Regex.Replace(
    "some text with @thepalace or @thepalaces in it." 
    + "\r\nHowever, @thepalacefoo and [email protected] won't be replaced.", // input 
    @"\[email protected]?\b", // pattern 
    "<replacement>"); // replacement text 

?使得前面的字符,s,可選的。我正在使用靜態的Regex.Replace方法。 \b匹配單詞和非單詞字符之間的邊界。 \B匹配\b沒有的每個邊界。見regex boundaries

結果

some text with <replacement> or <replacement> in it. 
However, @thepalacefoo and [email protected] won't be replaced. 
0

試試這個:

string PlaceName="theplace", Replacement ="..."; 

string Pattern = String.Format(@"@\b{0}\b", PlaceName); 
string Result = Regex.Replace(input, Pattern, Replacement);