我正在处理一个巨大的 xml 文件并且不想使用 XML 软件,因为我从 PubMed 网站导出的 xml 文件的结构不正确,并且会不时更改,所以我想在 notepad++ 或 ultraedit 中删除一些 xml 节点用正则表达式。例如,如何删除这一整行?
<ArticleId IdType="pii">S1806-83242018000100950</ArticleId>
使用Perl 正则表达式搜索字符串:
^[\t ]*<ArticleId IdType="pii">.*</ArticleId>[\t ]*(?:\r?\n|\r|$)
此正则表达式字符串搜索
^
... 从一行的开头[\t ]*
... 用于 0 个或多个水平制表符或空格(可选的前导制表符/空格)<ArticleId IdType="pii">
...这个字符串.*
...任何字符0 次或更多次,换行符除外</ArticleId>
...这个字符串[\t ]*
... 用于 0 个或多个水平制表符或空格(可选的尾随制表符/空格)(?:
... )
... 内部带有 OR 表达式的非标记组\r?\n|\r|$
...回车(可选)和换行或只是回车或行/文件的结尾。所以(?:\r?\n|\r|$)
匹配
$
不匹配行结束字符。它只是在<ArticleId IdType="pii">.*</ArticleId>
文件末尾也发现没有行尾的情况下添加,即文件中的最后一行没有行尾。
也可能是搜索字符串:
[\t ]*<ArticleId IdType="pii">.*</ArticleId>[\t ]*(?:\r?\n|\r)?
现在要删除的 XML 元素也可以在包含另一个标记的行中,因为^
删除了行首并且匹配行尾只是可选的。所以它不像上面的搜索表达式那样限制行。
要删除文件中带有 ArticleId 元素的每一行,您需要这个正则表达式:
^.*<ArticleId IdType="pii">.*$
如果结束标签不在同一行,这将不起作用。
如果您想删除所有带有 ArticleId 的行,而不考虑它们的内容或属性,您可以简单地搜索:
<ArticleId.+<\/ArticleId>