UltraEdit(或 MacOS 正则表达式):删除 xml 中的多行
UltraEdit (or MacOS regex): Delete multiple lines in xml
我有一个未格式化的 xml 文件,我想在其中删除包含某些值的特定名称的标签。
示例:
<XmlElement1>
</XmlElement1>
<XmlElement2 ... >
...
<Xml1SubElement someParameter="...SearchTerm..."/>
...
</XmlElement2>
<XmlElement3/>
...代表随机字符和随机多行
在上面的示例中,我想删除正文中包含 "SearchTerm" 的所有 XmlElement2 元素。换句话说,select <XmlElement2
和 </XmlElement2>
之间的所有文本跨多行,其中 SearchTerm
位于中间并替换为“”。
我在 MacOS 上使用 UltraEdit,并且可以灵活选择要使用的工具。
非常感谢您的帮助!
此任务的 Perl 正则表达式搜索字符串可以是例如:
(?s)^[\t ]*<XmlElement2(?:.(?!</XmlElement2>))+?SearchTerm.+?</XmlElement2>[\t ]*(?:\r?\n|\r)
解释:
(?s)
... 标记以匹配搜索表达式中的换行符。
^[\t ]*
... 从行首开始搜索并匹配 0 个或多个制表符或空格。
<XmlElement2
... 包含 SearchTerm
.
的元素的开始标记
(?:.(?!</XmlElement2>))+?
...一个非标记组,只要当前字符之后的字符串不是</XmlElement2>
,就可以非贪婪地找到任何字符一次或多次。否定前瞻 (?!</XmlElement2>)
阻止选择以 <XmlElement2
开头的块并匹配任何内容,包括一个或多个 </XmlElement2>
和 <XmlElement2
标记,直到在文件中的任何位置找到 SearchTerm
.
SearchTerm
... 必须在元素 XmlElement2
.
中找到的字符串
.+?
...任意字符(包括换行符)一次或多次非贪婪。非贪婪意味着在下一次出现 </XmlElement2>
时停止匹配字符,而不是在文件中最后一次出现 </XmlElement2>
时停止匹配字符。
</XmlElement2>
... 包含 SearchTerm
.
时要删除的 XML 元素的结束标记
[\t ]*(?:\r?\n|\r)
... 0 个或多个制表符或空格以及 DOS/Windows(回车 return + 换行符)或 UNIX(仅换行符)或 MAC(只是回车return)行结束。
PS:Perl 正则表达式替换已通过 UltraEdit 测试 Windows v22.20.0.49 on Windows XP 和 v25.20.0.88 on Windows 7 因为我没有 Mac.
我有一个未格式化的 xml 文件,我想在其中删除包含某些值的特定名称的标签。
示例:
<XmlElement1>
</XmlElement1>
<XmlElement2 ... >
...
<Xml1SubElement someParameter="...SearchTerm..."/>
...
</XmlElement2>
<XmlElement3/>
...代表随机字符和随机多行
在上面的示例中,我想删除正文中包含 "SearchTerm" 的所有 XmlElement2 元素。换句话说,select <XmlElement2
和 </XmlElement2>
之间的所有文本跨多行,其中 SearchTerm
位于中间并替换为“”。
我在 MacOS 上使用 UltraEdit,并且可以灵活选择要使用的工具。
非常感谢您的帮助!
此任务的 Perl 正则表达式搜索字符串可以是例如:
(?s)^[\t ]*<XmlElement2(?:.(?!</XmlElement2>))+?SearchTerm.+?</XmlElement2>[\t ]*(?:\r?\n|\r)
解释:
(?s)
... 标记以匹配搜索表达式中的换行符。
^[\t ]*
... 从行首开始搜索并匹配 0 个或多个制表符或空格。
<XmlElement2
... 包含 SearchTerm
.
(?:.(?!</XmlElement2>))+?
...一个非标记组,只要当前字符之后的字符串不是</XmlElement2>
,就可以非贪婪地找到任何字符一次或多次。否定前瞻 (?!</XmlElement2>)
阻止选择以 <XmlElement2
开头的块并匹配任何内容,包括一个或多个 </XmlElement2>
和 <XmlElement2
标记,直到在文件中的任何位置找到 SearchTerm
.
SearchTerm
... 必须在元素 XmlElement2
.
.+?
...任意字符(包括换行符)一次或多次非贪婪。非贪婪意味着在下一次出现 </XmlElement2>
时停止匹配字符,而不是在文件中最后一次出现 </XmlElement2>
时停止匹配字符。
</XmlElement2>
... 包含 SearchTerm
.
[\t ]*(?:\r?\n|\r)
... 0 个或多个制表符或空格以及 DOS/Windows(回车 return + 换行符)或 UNIX(仅换行符)或 MAC(只是回车return)行结束。
PS:Perl 正则表达式替换已通过 UltraEdit 测试 Windows v22.20.0.49 on Windows XP 和 v25.20.0.88 on Windows 7 因为我没有 Mac.