regex - 使用正则表达式从 xml 中删除行
问题描述
我正在处理一个巨大的 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|$)
匹配
- 回车 + 换行,这是以 DOS/Windows 文本文件结尾的行,
- 或者只是换行,它是以 UNIX 文本文件结尾的行,
- 或者只是回车,这是在 MAC OS X 之前以 MAC 文本文件结尾的行。
$
不匹配行结束字符。它只是在<ArticleId IdType="pii">.*</ArticleId>
文件末尾也发现没有行尾的情况下添加,即文件中的最后一行没有行尾。
也可能是搜索字符串:
[\t ]*<ArticleId IdType="pii">.*</ArticleId>[\t ]*(?:\r?\n|\r)?
现在要删除的 XML 元素也可以在包含另一个标记的行中,因为^
删除了行首并且匹配行尾只是可选的。所以它不像上面的搜索表达式那样限制行。
推荐阅读
- function - Powershell函数elseif语句不起作用
- elasticsearch - 如何 PUT GET 或 POST 一个新的索引 Elasticsearch 映射
- windows - Windows 上的 Matlab parfor 停止 CPU
- objective-c - React Native:从 Native 端访问 Redux 存储(swift/objective C)
- javascript - 使用 js 从本地存储中删除特定项目
- sql-server - 每分钟 10,000 个 HTTP 请求的性能
- scala - 在 spark scala 的数据框列中过滤 NULL 值
- ios - Firebase Messaging iOS - 首次运行多主题订阅的应用程序 1 失败
- git - git hooks如何在不同的操作系统上提供参数
- aframe - 开始:单击在 Aframe v 0.8.0 中不起作用