带有“$”符号的正则表达式字符串

时间:2015-02-23 17:00:48

标签: c# regex .net-4.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()网站!",所以我试图用RegEx来匹配整个单词。

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多个以&#34开头的关键字; $"替换方法名称。

2 个答案:

答案 0 :(得分:1)

这里的问题不需要与RegEx解决。这是您进行替换的顺序。这是因为第一次搜索是第二次搜索的子字符串。将它们切换,它将起作用。

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

解决此问题的另一种方法是在搜索字符串的END和开头处添加分隔符。例如:

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

答案 1 :(得分:0)

符号$是正则表达式中的特殊字符,表示字符串的结尾。如果要将其用作文字,则需要将其转义:

尝试使用\$代替$

有关详细信息:http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1