簡體   English   中英

使用正則表達式查找多行值並替換

[英]find multi line values using regular expression and replace

我在 memory 中有以下字符串,並希望從中快速刪除所有調試事件。 我正在使用的正則表達式還會抓取其他事件,直到找到 DEBUG 事件。 因此,在此示例中,它捕獲了多個事件。 在下面的 XML 中,它從開始到第三個事件進行捕獲。 它應該只有 select 下面這個輸入的第三個事件。

我不想在這里解析 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

謝謝!

在處理 HTML/XML 時,您應該總是更喜歡使用解析器。

對於這種特定情況,您可以像這樣使用正則表達式:

匹配:

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

並一無所有。

演示和解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM