RegexOptions.IgnoreCase没有替换

时间:2013-11-12 11:47:41

标签: c# .net regex

我制作了一个控制台应用程序来测试正则表达式替换:

    string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><orders><order>";
    xml = Regex.Replace(xml, "<?xml version=\"1.0\" encoding=\"utf-8\"?>", "", RegexOptions.IgnoreCase);
    Console.WriteLine(xml);
    Console.ReadLine();

但是我得到了与输入相同的输出,你们中的任何人都可以帮助我吗?:) 我想要的是字符串的第一部分被删除,只返回“”

2 个答案:

答案 0 :(得分:1)

这是因为你的正则表达式包含元字符。例如,<?表示“可选的<”,而非“<后跟?”。

您需要在调用Replace之前转义元字符:

    xml = Regex.Replace(
        xml
    ,   Regex.Escape("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
    ,   ""
    ,   RegexOptions.IgnoreCase);

答案 1 :(得分:1)

您的替换应如下所示:

xml = Regex.Replace(xml, @"<\?xml version=""1.0"" encoding=""utf-8""\?>", "", RegexOptions.IgnoreCase);
我取代了?用\?我还将字符串表示法更改为对Regex非常有用的替代格式。