【问题标题】:How to search and replace newline using regex?如何使用正则表达式搜索和替换换行符?
【发布时间】:2020-08-25 06:49:09
【问题描述】:

更具体地说,我正在努力实现这一目标。

例如:

Hello. Welcome to stackoverflow!




This is for testing purpose only.

So let's get started!

Good job. See you tomorrow.

我想删除一个换行符。所以结果应该是:

Hello. Welcome to stackoverflow!



This is for testing purpose only.
So let's get started!
Good job. See you tomorrow.

但如果我使用\n\n 正则表达式搜索它并用\n 替换所有内容,结果是:

Hello. Welcome to stackoverflow!


This is for testing purpose only.
So let's get started!
Good job. See you tomorrow.

问题是有两个结果与 Hello... 和 ...This 之间的正则表达式匹配,所以它在那里替换了两次。

我想要做的是,我只想为每个删除一行,不管有多少行。

哇,我应该做到这一点吗?

【问题讨论】:

  • 如何处理和匹配换行符取决于您使用的正则表达式实现。一些纯粹的面向行的正则表达式工具根本无法匹配换行符。请查看Stack Overflow regex tag guidance 并根据此添加合适的平台或语言标签。
  • 哦,我会调查的。我不确定哪个,notepad ++ 是我的主要编辑器。

标签: regex notepad++


【解决方案1】:

你可以使用lookbehind:

(?<=\.|!)\n

然后什么都没有替换。这将只删除\n 后面的.!

或者,您也可以使用前瞻:

\n(?=\w)

这匹配任何一个\n,后跟一个字母、数字或下划线。

【讨论】:

  • 哦,天哪,第二个要好得多,因为我不知道这句话会以什么结尾:) thx 但我猜 \n\n(?=\w) 是更合适的正则表达式和替换为 \n。
  • 因为某些语句只有一个换行符,会打乱文本的短语结构。
  • 您也可以尝试 ^\s*(\n) 用 $1 作为替换(适用于 Notepad++)
  • 所以如果我的回答对您有帮助,请考虑接受和/或支持它
【解决方案2】:

要么全部删除:

(?<!\n)\n

live demo

或者如果您的工具/语言不支持后视,请全部替换:

([^\n])\n

使用捕获的第 1 组,即 $1\1,具体取决于您的工具/语言。

【讨论】:

    【解决方案3】:
    • Ctrl+H
    • 查找内容:\R(\R+)
    • 替换为:$1
    • 检查 环绕
    • CHECK 正则表达式
    • 全部替换

    说明:

    \R          # any kind of linebreak (i.e. \r, \n, \r\n)
    (\R+)       # group 1, 1 or more linebreak
    

    替换:

    $1          # content of group 1
    

    屏幕截图(之前):

    截图(之后):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-14
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 2010-11-25
      • 2010-10-30
      相关资源
      最近更新 更多