所以我試圖取代@theplace
或@theplaces
使用正則表達式模式一樣喜歡一句話:替換整個單詞使用C#正則表達式的象徵
String Pattern = string.Format(@"\b{0}\b", PlaceName);
但是當我做了更換,但沒有找到模式,我猜這是問題的@
符號。
有人可以告訴我我需要做的正則表達式模式,以使其工作?
所以我試圖取代@theplace
或@theplaces
使用正則表達式模式一樣喜歡一句話:替換整個單詞使用C#正則表達式的象徵
String Pattern = string.Format(@"\b{0}\b", PlaceName);
但是當我做了更換,但沒有找到模式,我猜這是問題的@
符號。
有人可以告訴我我需要做的正則表達式模式,以使其工作?
您的問題*是\b
(字邊界)@
之前。在空間和@
之間沒有字邊界。
您可以將其刪除,或將其替換爲非邊界,即大寫B
。
string Pattern = string.Format(@"\B{0}\b", PlaceName);
*假設PlaceName
開始@
。
工作,Thx肯德爾 – JeffreyJ 2013-05-02 17:00:55
以下代碼將替換@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.
試試這個:
string PlaceName="theplace", Replacement ="...";
string Pattern = String.Format(@"@\b{0}\b", PlaceName);
string Result = Regex.Replace(input, Pattern, Replacement);
所以'PlaceName'包含'@ theplace'? – nhahtdh 2013-05-02 14:22:01
爲什麼在這種情況下正則表達式,而不是string.replace? – 2013-05-02 14:25:14
@BryanCrosby:由於字符串替換不能區分'@ a'和'@ aplace'?不過,我不太瞭解他的問題。 – nhahtdh 2013-05-02 14:26:31