Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-匹配多个先行条件_Regex_Regex Lookarounds - Fatal编程技术网

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

Regex 正则表达式-匹配多个先行条件,regex,regex-lookarounds,Regex,Regex Lookarounds,我需要找到一个正则表达式规则,它可以在项目符号之间找到新行并删除它们。例如: •以下是一些文本 它流向这个由2个换行符分隔的位置 •这是一个由两条新线分隔的新项目符号 应成为: •以下是一些文本,由两行新行分隔 •这是一个由两条新线分隔的新项目符号 以下是我尝试过的: •(.+)\K\n+(?(?=[^•])(?=.+\n+•)) 我的想法是: 查找前一行,以• 收集一个或多个换行符之前的任何字符并丢弃。我现在已经准备好根据某些条件提前匹配并替换换行符 向前看并检查换行符后的下一个字符不是项目

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

•以下是一些文本

它流向这个由2个换行符分隔的位置

•这是一个由两条新线分隔的新项目符号

应成为:

•以下是一些文本,由两行新行分隔

•这是一个由两条新线分隔的新项目符号

以下是我尝试过的:

•(.+)\K\n+(?(?=[^•])(?=.+\n+•))
我的想法是:

  • 查找前一行,以•
  • 收集一个或多个换行符之前的任何字符并丢弃。我现在已经准备好根据某些条件提前匹配并替换换行符
  • 向前看并检查换行符后的下一个字符不是项目符号
  • 如果是,请检查以确保在所有字符后跟一个或多个换行符之后,还有另一个项目符号
  • 我认为我的问题不是正确地理解如何在积极的前瞻中把这些条件联系起来,而是努力找到任何明确的答案/例子来解决这类问题


    一如既往,我们非常感谢您的帮助

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

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

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

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

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

    您使用的是什么编程语言?最好将此操作分为两部分。1) 盲目删除所有换行符。2) 找到所有项目符号并将其替换为
    \n•
    您可以使用
    ^•[^•]+
    获取每个单独的项目符号及其数据,循环匹配,并删除每个匹配中的换行符。你是说像这样只处理前两行新词<代码>^•.*\K(?:\r?\n(?!•)\r?\n如何区分由一行文本分隔的两个项目符号列表与文本位于新行的项目符号列表?如果列表中的最后一个项目符号的文本结尾换了一行怎么办?谢谢,非常感谢您的输入。我需要强制执行的规则是,只有在下一行也是项目符号时,才应删除换行符。我已经更新了您精心编写的regex101示例,这可能有助于更有效地将其转化为文字@劳森:你怎么知道下面几行什么时候不再属于子弹了?如果我们有一条非子弹线,它前面紧跟着一条子弹线,后面紧跟着一条非子弹线,那么当前的那一行就不应该被上面的子弹线所吸收——希望这是有意义的@第四,你应该查看OP问题的评论帖子。这在正则表达式中是不可能的。太好了!这就是我想要的!非常感谢你的坚持