使用正则表达式从xml中删除行

时间:2018-06-07 15:50:11

标签: regex xml notepad++ ultraedit

我正在处理一个巨大的xml文件,并且不想使用XML软件,因为我从PubMed网站导出的xml文件的结构不正确,不时会发生变化,所以我想要删除notepad ++中的某些xml节点或使用regex删除ultraedit。如何删除例如整行?

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

3 个答案:

答案 0 :(得分:0)

要删除文件中包含ArticleId元素的每一行,您需要此正则表达式:

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

如果结束标记不在同一行,则无效。

答案 1 :(得分:0)

使用 Perl正则表达式搜索字符串:

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

此正则表达式字符串搜索

  • ^ ...从行的开头
  • [\t ]* ...用于0个或更多水平制表符或空格(可选的主要制表符/空格)
  • <ArticleId IdType="pii"> ...此字符串
  • .* ...除newline个字符
  • 以外的任何字符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元素也可以在包含另一个标记的行中,因为^删除了行的开头,并且匹配行结尾只是可选的。所以它不像上面的搜索表达那样限制行。

答案 2 :(得分:-1)

如果您想要使用ArticleId删除所有行,而不考虑其内容或属性,则可以直接搜索:

<ArticleId.+<\/ArticleId>