【问题标题】:How do I replace text with a linebreak using regular expressions如何使用正则表达式用换行符替换文本
【发布时间】:2026-01-22 10:25:01
【问题描述】:

我编写了一个程序,它在目标文件中搜索“打开”而不匹配“关闭”。它产生这样的输出:

open
close
open
open
close

在这个例子中,第二个'open'没有紧跟一个匹配的'close',所以我认为这是一个错误。我的文本编辑器(editpad)有一个正则表达式搜索/替换功能,我想用它来摆脱所有正确的对,所以我可以很容易地注意到不正确的情况。我尝试替换以下

open\r\nclose

我认为这将匹配这两个词以及它们之间的换行符(我使用的是 Windows)。这没有用。

有人知道为什么没有吗?

【问题讨论】:

  • 它们之间是否有任何尾随空格?您是否尝试过使用正则表达式来搜索 \r\n 以查看它是否能找到它们之间的内容?
  • 您是否选择了Regex 模式?点击Regex,然后点击Replace all
  • 顺便说一句,预期的结果是文档中只剩下一个open 吗?
  • 把它改成这个有效果吗?打开[\r\n]关闭
  • 如果 OP 没有选择正则表达式搜索和替换模式并且行结尾是 CRLF,它就无法工作。

标签: regex editpad


【解决方案1】:

如果您选择Regex 模式,您的正则表达式将起作用,但我也建议通过在\r 后面附加? 来支持LF 结尾,从而使\r 成为可选:

open\r?\nclose

查看带有设置的屏幕截图并证明它在 EditPad 中有效:

【讨论】:

  • open\Rclose 是否有效会很有趣,因为它会捕获所有类型的行尾。
  • @JoopEggen 这是我尝试的第一件事,但没有成功。 \R 以红色突出显示,表示语法错误。