正则表达式 - 匹配多个先行条件

Regex - match multiple lookahead conditions

我需要找到一个正则表达式规则,它可以在项目符号点之间找到换行符并将其删除。例如:

• Here is some text

which flows to this separated by 2 newlines

• This is a new bullet point separated by 2 newlines

应该变成:

• Here is some text which flows to this separated by 2 newlines

• This is a new bullet point separated by 2 newlines

这是我尝试过的方法:

•(.+)\K\n+(?(?=[^•])(?=.+\n+•))

我的想法是:

  1. 查找以 •
  2. 开头的上一行
  3. 收集一个或多个换行符之前的任何字符并丢弃。我现在准备好提前匹配并根据某些条件替换换行符。
  4. 先行检查换行符后的下一个字符不是项目符号。
  5. 如果是,请检查以确保在所有字符后跟一个或多个换行符之后,还有另一个项目符号。

我认为我的问题是没有正确理解如何在积极的前瞻中将这些条件链接在一起,而是努力寻找任何明确的答案/示例来处理此类问题。

一如既往,非常感谢任何帮助!

您可以匹配 2 个换行符,然后断言右边的内容不是以项目符号开头,而是包含项目符号。

^•.*\K\r?\n\r?\n(?=(?!•).*\r?\n\r?\n•)

部分

  • ^ 字符串开头
  • •.* 匹配项目符号和任何字符 0+ 次,换行符除外
  • \K\r?\n\r?\n忘记匹配的内容,匹配2个换行符
  • (?=正向前瞻,断言右边的是
    • (?!•).* 否定前瞻,断言右边的不是
    • \r?\n\r?\n• 匹配 2 个换行符后跟
  • ) 关闭正面前瞻

Regex demo

如果支持\R匹配unicode换行序列,也可以使用

^•.*\K\R{2}(?=(?!•).*\R{2}•)