2015-02-23 49 views
0

我正在使用StringBuilder.Replace()将一些“关键字”更改为我自己的方法,但由于它不匹配整个单词,我需要找到一种方法来正确替换它。

string example = "Hey $name! Welcome to $namewebsite!"; 
StringBuilder sb = new StringBuilder(example); 
sb.Replace("$name", "getName()"); 
sb.Replace("$namewebsite", "getWebSiteName()"); 
return sb; 

上面的输出将是“嘿的getName()!欢迎的getName()的网站!”,所以我试图用正则表达式来整个单词相匹配。

string example = "Hey $name! Welcome to $namewebsite!"; 
example = Regex.Replace(example, "\b$name\b", "getName()"); 
example = Regex.Replace(example, "\b$namewebsite\b", "getWebSiteName()"); 
return example; 

但由于“关键字”有符号“$”这是行不通的,至少这是我的想法,因为它不替换任何“关键词”的。

当然这只是我的代码的一个小例子,我有30多个以“$”开头的关键字替换为方法名称。

+0

您是否尝试使用'\ $'转义它? – arco444 2015-02-23 17:02:18

+0

在'$'前面放置一个反斜杠来转义它,即使用'“\ $”'。或者'Regex.Escape(“$ name”)' – CodesInChaos 2015-02-23 17:02:27

+0

当我使用te Regex.Escape(“$ name”)时,它不断将$ namewebsite替换为getName()网站 – Kyore 2015-02-23 17:53:34

回答

1

这里的问题并不需要用正则表达式是求解。这是您进行替换的顺序。这是因为第一次搜索是第二次搜索的子串。切换它们,它会起作用。

string example = "Hey $name! Welcome to $namewebsite!"; 
StringBuilder sb = new StringBuilder(example); 
sb.Replace("$namewebsite", "getWebSiteName()"); 
sb.Replace("$name", "getName()"); 
return sb; 

工作例如:https://ideone.com/kHwHUT

另一种方式来解决,这将是把一个分隔符,在搜索字符串的结束以及开始。例如:

string example = "Hey $name$! Welcome to $namewebsite$!"; 
StringBuilder sb = new StringBuilder(example); 
sb.Replace("$name$", "getName()"); 
sb.Replace("$namewebsite$", "getWebSiteName()"); 
return sb; 
+0

是的,最好的方法是改变它的位置,谢谢。 – Kyore 2015-02-24 17:23:05

相关问题