首页 > 解决方案 > 正则表达式在记事本++中查找/替换多个文本

问题描述

我在一些正则表达式查找/替换方面有点挣扎..

我想搜索一些术语,当它找到其中任何一个时,它会删除它们所在的行和下一行。我要搜索的术语将包含引号和逗号。

这些是典型的搜索词(包括引号):

“文本二”,BB

“文本三”,AA

“文本四”,AA

典型文件(将是 1000 行长)内容:

#text:0 first="blah" second="TEXT ONE",AA | more text
Line 1
#text:0 first="blah" second="TEXT TWO",BB | more text
Line 2
#text:0 first="blah" second="TEXT THREE",AA | more text
Line 3
#text:0 first="blah" second="TEXT FOUR",BB | more text
Line 4
#text:0 first="blah" second="TEXT THREE",AA | more text
Line 5
#text:0 first="blah" second="TEXT FOUR",AA | more text
Line 2

我希望结果是:

#text:0 first="blah" second="TEXT ONE",AA | more text
Line 1
#text:0 first="blah" second="TEXT FOUR",BB | more text
Line 4

即包含上述三个术语中的任何一个的任何行都将被完全删除 - 以及它的下一行。

我尝试了正则表达式搜索/替换:

找什么:-

.*"TEXT TWO",BB.*\R.*(?:\R|$)|.*"TEXT THREE",AA.*\R.*(?:\R|$)|.*"TEXT FOUR",AA.*\R.*(?:\R|$)

替换为:-(留空)

当我执行 'find' 和 'count' 时,它正确显示 86 个匹配项。如果我执行“替换”,它说它已经替换了 86 个匹配项——但实际上它已经删除了数千行。困惑......你能帮忙吗?我需要一些额外的引号或转义字符吗?

标签: regexreplacefindnotepad++

解决方案


正如评论中所说,不要检查. matches newline.

你也可以简化一点:

^.*(?:”TEXT TWO”,BB|”TEXT THREE”,AA|”TEXT FOUR”,AA).*\R.*(?:\R|$)

推荐阅读