为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式查找多行值并替换

使用正则表达式查找多行值并替换

互换的青春 2023-01-06 10:43:49

我在内存中有以下字符串,想快速从中删除所有调试事件。我使用的正则表达式还会抓取其他事件,直到找到 DEBUG 事件。所以在这个示例中,它捕获了不止一个事件。在下面的 XML 中,它从开始到第三个事件进行捕获。它应该只为下面的这个输入选择第三个事件。


我不想在这里解析 XML。我只想从大量数据中删除调试事件(> 95% 的事件)。我试过使用解析器做同样的事情,但它在一个微型 SBC 上超时了。如果您有其他方法可以在 JavaScript 中(在浏览器之外)解决这个问题,我愿意接受任何建议。


输入:


<event type="app">

    <header>

        <info>1234</info>

    </header>

    <body>

        <severity type="INFO">message</severity>

    </body>

</event>

<event type="app">

    <header>

        <info>1235</info>

    </header>

    <body>

        <severity type="ERROR">message</severity>

    </body>

</event><event type="app">

    <header>

        <info>1236</info>

    </header>

    <body>

        <severity type="DEBUG">message</severity>

    </body>

</event>

<event type="app">

    <header>

        <info>1237</info>

    </header>

    <body>

        <severity type="ERROR">message</severity>

    </body>

</event>

正则表达式: <event type="app"(.|\n|\r\n)*?<severity type="DEBUG"(.|\n|\r\n)*?<\/event>


我在网上有这个样本:


https://regex101.com/r/JW3DWE/1


谢谢!


查看完整描述

1 回答

?
守着星空守着你

TA贡献1554条经验 获得超8个赞

在处理 HTML/XML 时,您应该总是更喜欢使用解析器。

对于这种特定情况,您可以像这样使用正则表达式:

比赛:

<event type="app">(?:(?!<\/event>)[\s\S])*<severity type="DEBUG">[\s\S]*?<\/event>

并用任何东西代替。

演示与解释


查看完整回答
反对 回复 2023-01-06
  • 1 回答
  • 0 关注
  • 14 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信