正则表达式-匹配多个超前条件

时间:2019-10-28 15:24:34

标签: regex regex-lookarounds

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

  

•这是一些文本

     

以2个换行符分隔的行

     

•这是一个新的项目符号点,由2个换行符分隔

应成为:

  

•这是一些文字,以2个换行符分隔

     

•这是一个新的项目符号点,由2个换行符分隔

这是我尝试过的:

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

我的想法是:

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

我认为我的问题不是正确地理解如何将这些条件以积极的眼光联系在一起,而是努力寻找解决此类问题的明确答案/示例。

一如既往,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

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

部分

  • ^字符串的开头
  • •.*匹配项目符号和除换行符外的所有char 0次以上
  • \K\r?\n\r?\n忘记匹配的内容并匹配2个换行符
  • (?=正向前进,断言右边是
    • (?!•).*负向前进,断言右边的不是
    • \r?\n\r?\n•匹配2个换行符,后跟
  • )积极回望

Regex demo

如果支持\R来匹配Unicode换行符序列,您也可以使用

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