1

我正在处理一个巨大的 xml 文件并且不想使用 XML 软件,因为我从 PubMed 网站导出的 xml 文件的结构不正确,并且会不时更改,所以我想在 notepad++ 或 ultraedit 中删除一些 xml 节点用正则表达式。例如,如何删除这一整行?

<ArticleId IdType="pii">S1806-83242018000100950</ArticleId>
4

3 回答 3

0

使用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|$)匹配

  • 回车 + 换行,这是以 DOS/Windows 文本文件结尾的行,
  • 或者只是换行,它是以 UNIX 文本文件结尾的行,
  • 或者只是回车,这是在 MAC OS X 之前以 MAC 文本文件结尾的行。

$不匹配行结束字符。它只是在<ArticleId IdType="pii">.*</ArticleId>文件末尾也发现没有行尾的情况下添加,即文件中的最后一行没有行尾。

也可能是搜索字符串:

[\t ]*<ArticleId IdType="pii">.*</ArticleId>[\t ]*(?:\r?\n|\r)?

现在要删除的 XML 元素也可以在包含另一个标记的行中,因为^删除了行首并且匹配行尾只是可选的。所以它不像上面的搜索表达式那样限制行。

于 2018-06-09T12:20:10.280 回答
0

要删除文件中带有 ArticleId 元素的每一行,您需要这个正则表达式:

^.*<ArticleId IdType="pii">.*$

如果结束标签不在同一行,这将不起作用。

于 2018-06-07T19:39:49.913 回答
-1

如果您想删除所有带有 ArticleId 的行,而不考虑它们的内容或属性,您可以简单地搜索:

<ArticleId.+<\/ArticleId>
于 2018-06-07T19:21:33.557 回答