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

C# RegEx.Replace失败,替换字符串为$0.00,c#,regex,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 = "som

我正在尝试使用静态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;
    }
}
失败正则表达式的输出为:

一些文本[BEGIN-LOOP:DETAILS]这是我要替换的[END-LOOP:DETAILS].00

应该是


某些文本$0.00

您需要转义美元,如上的MSDN页面所示

$$替换在替换的字符串中插入一个文字“$”字符

所以你想要:

string replacementString = "some text $$0.00";

顺便说一句,请不要像那样使用try/catch块。。。它会毫无益处地把代码弄乱。

您应该转义
$
文字,例如:
$
。另外,如果您只想替换
这就是我要替换的
最好使用regexp:

(?<=\[BEGIN-LOOP:DETAILS\]).*?(?=\[END-LOOP:DETAILS\])

(?正如Kirill Polishchuk已经指出的,您应该使用不同的搜索模式。此模式匹配前缀和后缀之间的位置:

(?<=prefix)find(?=suffix)

(?我对regex了解不多,但您必须避开“$”吗?当它失败时会发生什么?我用输出更新了问题
(?<=\[BEGIN-LOOP:DETAILS]).*?(?=\[END-LOOP:DETAILS])