如何解决删除不包含某个孩子的标签
<Header>
...
<UserData>
<UserID></UserID>
...
</UserData>
...
</Header>
我需要清理文件,删除每个不包含具有特定值的 <UserData>
的 <UserID>
(为了示例而说 DE123)并维护其他所有内容。
例如,如果我有这样的事情:
<Header>
...
<UserData>
<UserID>DE123</UserID>
...
</UserData>
<UserData>
<UserID>JJ456</UserID>
...
</UserData>
...
</Header>
我需要这样做:
<Header>
...
<UserData>
<UserID>DE123</UserID>
...
</UserData>
...
</Header>
我怎样才能做到这一点?尝试过正则表达式,但我唯一完成的事情就是将每一行倒置书签,除了特定的 <UserID>
...
解决方法
你可以试试这个正则表达式:
<UserData>(?:(?!<\/UserData>|<UserID>DE123<\/UserID>)[\s\S])*<\/UserData>
替换:空
-
<UserData>
以<UserData>
开头 -
(?:...)*
非捕获组,出现任何情况 -
(?!<\/UserData>|<UserID>DE123<\/UserID>)[\s\S]
否定前瞻,确保在测试[\s\S]
(任何字符,包括换行符)时,不会消耗<\/UserData>
和<UserID>DE123<\/UserID>
。 -
<\/UserData>
以<\/UserData>
结尾
当这个正则表达式匹配任何东西时,意味着它是一个完整的 <UserData>...</UserData>
外壳,里面没有找到 <UserID>DE123<\/UserID>
。
您可以将 <UserID>DE123<\/UserID>
部分替换为您想要的任何内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。