【问题标题】:Regex find/replace multiple text in Notepad++正则表达式在记事本++中查找/替换多个文本
【发布时间】:2019-02-10 13:03:07
【问题描述】:

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

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

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

“文本二”,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

即任何包含上述 3 个术语的行都将被完全删除 - 连同其下一行。

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

找到什么:-

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

替换为:-(留空)

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

【问题讨论】:

  • 我认为这可能与贪婪有关。您是否尝试过“.matches newline”选项?这会影响结果吗?
  • 您提供的输入对我来说效果很好。

标签: regex replace find notepad++


【解决方案1】:

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

你也可以简化一下:

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

【讨论】:

  • 我没有使用 .matches 换行符。当它做出改变时,它告诉我它变成了 86(正确的数量)——但实际上已经消失了数千行。当你说它工作得很好时,你在文本中还有其他行吗?
  • @sjw:奇怪,我刚刚测试过它并且工作正常。哪个版本的 Npp(这里我有 7.5.8)
  • 我正在使用 6.9.1(我在这台 PC 上允许使用的最新版本) - 但在您的版本上得到了相同的结果,这就是为什么我认为无论如何尝试不同版本可能会很好。 (同样,简化建议的结果相同。)
  • 那么你在某处还有一些其他的字符。请edit your question 添加真实的测试用例。您使用的引号是否真的是 而不是"
  • 我已经找到了任何“或”——没有。查找/替换中的“或”是否有限制?该文件也有超过 45k 行。如果我选择查询并执行“查找下一个”,然后单步执行它只会找到有效的解决方案。当我做“全部替换”时,它说它也只替换了那些。如果文件不是那么大,我不会注意到它已经删除了其他行——在我的例子中,它被删除了超过 40k 的太多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
相关资源
最近更新 更多