删除除特定模式之外的所有内容

Remove everything except a certain pattern

我有一个包含很多字符串的日志文件。 我想从此文件中删除所有内容(查找并替换),除了以以下内容开头的任何字符串:phone= 并以 Digits=1

结尾

例如:phone=97212345678&step=1&digits=1

为了找到我正在使用的字符串 (phone=.*digits=1),它有效!但我没能找到正则表达式 select 除了这个字符串之外的所有内容并清除它们。

sample file.

如果您使用的是 Notepad++ 或 EditPlus 等工具,您可以使用以下正则表达式替换:

查找字符串:^phone=(\d+&step=1&)digits=1

替换字符串:

为了删除特定文本以外的任何内容,您需要使用 .*(text_you_need_to_keep).*. 匹配换行符。

在 Notepad++ 中,使用

查找.*(phone=\S*?digits=1).*
替换</code></p> <p><strong><em>注意</em></strong>:<strong>。匹配换行符</strong> 选项必须<em>选中</em>.</p> <p>我在捕获模式中使用 <code>\S*? 而不是 .*,因为您只想匹配从 phone= 到最接近的 digits.* 过于贪婪,可能会在打开 DOTALL 选项的情况下跨越多行。

更新

当您想在文本中保留一些 多次 的模式时,在 Notepad++ 中,您可以使用

.*?(phone=\S*?digits=1)

替换为\n。这样,您将 删除所有不需要的子字符串,但最后一次出现必要的子模式 .

之后的子字符串

您将需要手动或使用

删除最后一个块
   FIND: (phone=\S*?digits=1).*
REPLACE: 

查找匹配项的正则表达式:

/^phone=.+&digits=1$/

要替换匹配项除外的文件:

/^(?!phone=.+&digits=1$).*/gm

假设您有如下数据:

"for execution plan [ID = 7420] at 12/06/2018 08:00:00"

您只想从数千行中提取 [ID = dddd] 部分。 在 Notepad++ 中按 ctrl+h 打开替换 window,检查正则表达式。

查找内容:

.*?(\[ID = \d+\]).*

替换为:


对于您的特定字符串,正则表达式为:

.*?(phone=.*?digits=1).*