RegEx.Replace失败,替换字符串为$ 0.00

时间:2012-01-24 14:54:09

标签: c# regex

我正在尝试使用静态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

3 个答案:

答案 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])