我正在尝试使用静态RegEx.Replace方法进行简单的替换,如果在替换字符串中我有“$ 0.00”或某种衍生物,它会失败。
以下是代码:
void Main()
{
try
{
string inputString = "[BEGIN-LOOP:DETAILS]this is what I want to replace[END-LOOP:DETAILS]";
string replacementString = "some text $0.00";
inputString = Regex.Replace(inputString, @"(\[BEGIN-LOOP:DETAILS\])(.*?)(\[END-LOOP:DETAILS\])", replacementString, RegexOptions.IgnoreCase | RegexOptions.Singleline);
Console.WriteLine(inputString);
}
catch (Exception ex)
{
throw;
}
}
失败的RegEx的输出是:
一些文字[BEGIN-LOOP:DETAILS]这就是我要替换的内容[END-LOOP:DETAILS] .00
应该是
一些文字$ 0.00
答案 0 :(得分:6)
您需要转移美元,如Substitutions上的MSDN页面所示。
$$替换在替换的字符串中插入文字“$”字符。
所以你想要:
string replacementString = "some text $$0.00";
顺便说一句,请不要使用像这样的try / catch块......它会使你的代码混乱而无益。
答案 1 :(得分:0)
你应该逃避$
字面意思,例如:$$
。另外,如果您只想更换this is what I want to replace
,最好使用regexp:
(?<=\[BEGIN-LOOP:DETAILS\]).*?(?=\[END-LOOP:DETAILS\])
答案 2 :(得分:0)
正如Kirill Polishchuk已经指出的那样,你应该使用不同的搜索模式。此模式匹配前缀和后缀之间的位置:
(?<=prefix)find(?=suffix)
应用于您的问题,模式将如下所示:
(?<=\[BEGIN-LOOP:DETAILS]).*?(?=\[END-LOOP:DETAILS])