【问题标题】:How can I replace < and > in the content of xml file using regex?如何使用正则表达式替换 xml 文件内容中的 < 和 >?
【发布时间】:2010-01-25 18:56:35
【问题描述】:

如何将“”(在 xml 文件的内容中)替换为匹配的 "&amp;lt;""&amp;gt;" (带有一组预先知道的标签)使用正则表达式?

示例:&lt;abc&gt;fd&lt;jkh&lt;/abc&gt;&lt;def&gt;e&gt;e&lt;/def&gt; 应导致: &lt;abc&gt;fd&amp;lt;jkh&lt;/abc&gt;&lt;def&gt;e&amp;lt;e&lt;/def&gt;

必须使用正则表达式! (没有 xml 加载等...)

【问题讨论】:

  • 你想用&lt;abc def="g&lt;h"&gt;&lt;abc def="&lt;ghi jkl=&lt;mno&gt;&gt;&lt;/abc&gt;&lt;ghi&gt;&lt;jkl&lt;mno&gt;做什么?
  • 感谢您的回复!我在这个文件中没有属性。
  • @Jack:但是有 CDATA 部分或 cmets 吗?
  • 没有。没有 CDATA 或 cmets
  • 这是解决所有情况的示例。 ">sdfsdf>asdasdasdasdasds" 只有 和匹配的 是预定义的。

标签: c# .net xml regex replace


【解决方案1】:

我认为模式

<([^>]*<)

将匹配在&gt; 之前遇到另一个&lt;&lt;(因此不是标签的一部分)

...和模式

(>[^<]*)>

将匹配在另一个&gt; 之后的&gt;

var first = Regex.Replace(@"<abc>fd<jkh</abc><def>e>e</def>",@"<([^>]*?<)",@"&lt;$1");
var final = Regex.Replace(first,@"(>[^<]*?)>",@"$1&gt;");

编辑:

这确实有效,但您必须多次通过它。我确信有更纯粹的方法,但这确实有效。

class Program
{
    static void Main(string[] args)
    {
        var next = @"<abc>dffs<<df</abc>";
        string current;
        do
        {
            current = next;
            next = Regex.Replace(current, @"<([^>]*?<)", @"&lt;$1");
            next = Regex.Replace(next, @"(>[^<]*?)>", @"$1&gt;");
        } while(next != current);
        Console.WriteLine(current);
        Console.ReadKey();
    }
}

【讨论】:

  • @Jack 你没有以 dffs 为例。我认为您应该学习一些 RegEx,以便您可以借鉴 Jay 的示例并对其进行扩展。请记住,我们应该为您指明道路,而不是为您走。
  • 这是我的实际示例,它将解决所有情况。 ">sdfsdf>asdasdasdasdasds" 只有 和匹配的 是预定义的。
  • 这个很不错!但仍然无法替换 和 !
【解决方案2】:
s/<(?=[^<>]*<)/&lt;/g
s/>(?<=\>[^<>]*)/&gt;/g

在 C# 中,

new Regex("<(?=[^<>]*<)").Replace(your_xml_string, "&lt;");
new Regex(">(?<=\>[^<>]*)").Replace(your_xml_string, "&gt;");

未测试。我手头没有 C#。

【讨论】:

  • 非常好。但它没有取代像 >dfddf 这样的东西,也没有取代像 sdfsdfdasf 这样的非预定义标签,必须有一些预定义标签......否则我们不要替换未定义的标签...
  • @Jack:你为什么不能在问题中一次写下所有论点?如果您需要检测&lt;x&gt;&lt;y&gt;&lt;/x&gt;,您不能指望使用 1 或 2 个简单的正则表达式。
猜你喜欢
  • 2018-01-07
  • 2010-10-01
  • 2014-10-28
  • 1970-01-01
  • 2019-07-25
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
相关资源
最近更新 更多