【问题标题】:UltraEdit (or MacOS regex): Delete multiple lines in xmlUltraEdit(或 MacOS 正则表达式):删除 xml 中的多行
【发布时间】:2019-05-29 12:01:34
【问题描述】:

我有一个未格式化的 xml 文件,我想在其中删除包含某些值的特定名称的标签。

例子:

<XmlElement1>
</XmlElement1>
<XmlElement2 ... >
   ...
   <Xml1SubElement someParameter="...SearchTerm..."/>
   ...
</XmlElement2>
<XmlElement3/>

...代表随机字符和随机多行

在上面的示例中,我想删除正文中包含“SearchTerm”的所有 XmlElement2 元素。换句话说,在SearchTerm 位于中间的多行中选择&lt;XmlElement2&lt;/XmlElement2&gt; 之间的所有文本并替换为“”。

我在 MacOS 上使用 UltraEdit,并且可以灵活地使用哪些工具。

非常感谢您的帮助!

【问题讨论】:

    标签: regex newline ultraedit


    【解决方案1】:

    此任务的 Perl 正则表达式搜索字符串可以是例如:

    (?s)^[\t ]*<XmlElement2(?:.(?!</XmlElement2>))+?SearchTerm.+?</XmlElement2>[\t ]*(?:\r?\n|\r)
    

    解释:

    (?s) ... 标志以在搜索表达式中也通过点匹配换行符。

    ^[\t ]* ... 从行首开始搜索并匹配 0 个或多个制表符或空格。

    &lt;XmlElement2 ... 要删除的元素的开始标记包含SearchTerm

    (?:.(?!&lt;/XmlElement2&gt;))+? ...一个非标记组,只要当前字符后面的字符串不是&lt;/XmlElement2&gt;,就可以一次或多次非贪婪地查找任何字符。负前瞻(?!&lt;/XmlElement2&gt;) 阻止选择以&lt;XmlElement2 开头的块并匹配任何内容,包括一个或多个&lt;/XmlElement2&gt;&lt;XmlElement2 标记,直到在文件中的任何位置找到SearchTerm

    SearchTerm ... 必须在元素XmlElement2 中找到的字符串。

    .+? ... 任何字符(包括换行符)一次或多次非贪婪。非贪婪意味着在下次出现 &lt;/XmlElement2&gt; 时停止匹配字符,而不是在文件中最后一次出现 &lt;/XmlElement2&gt; 时停止匹配字符。

    &lt;/XmlElement2&gt; ... 要删除的 XML 元素的结束标记包含 SearchTerm

    [\t ]*(?:\r?\n|\r) ... 0 个或多个制表符或空格以及 DOS/Windows(回车 + 换行)或 UNIX(仅换行)或 MAC(仅回车)行结尾。

    PS:Perl 正则表达式替换在 Windows XP 上使用 UltraEdit for Windows v22.20.0.49 和在 Windows 7 上使用 v25.20.0.88 进行了测试,因为我没有 Mac。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 2011-01-28
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多