用于在两个 regex-patters 之间匹配文本的正则表达式

Regex for matching text between two regex-patters

我正在寻找一种从文本文档中捕获文本及其段落标题的方法。

文本文件:

paraTitle-1
--------
Lines and words
empty....
more lines



still part of paraTitle-1

paraTitle-2
--------
Lines and words
empty....
more lines



still part of paraTitle-2

我想同时捕获标题和标题下方的文字。

 array = [paraTitle-1: <text...below paraTitle-11>,
          paraTitle-2: <text below paraTitle-2>]

我用模式 (?<=(.*))\n----*\n(?=(.*)) 尝试了几次都无济于事。任何指导都会很棒。

可以使用以下正则表达式:

(?!--------\R)(.*)\R--------\R((?:\R?(?!.*\R--------\R).*)+)

参见 regex101

标题分隔线 (--------) 也可以指定为 -{8},如果需要,这样更容易调整到可变长度,例如它可以是 6 个或更多,而不是恰好 8 个破折号:-{6,}

解释:

  • 捕获一行文本(段落标题):

    (.*)\R
    
    • . 不匹配换行符
    • \R 匹配换行符,包括 Windows CRLF 对。如果您的正则表达式引擎不支持 \R,请使用 \r?\n 作为简单的替代方法。
  • 确保捕获的文本不是标题分隔线:

    (?!--------\R)
    
  • 跳过强制标题分隔线:

    --------\R
    
  • 捕获段落文本,作为重复的行组:

    ((?:xxx)+)
    
  • 一行有一个可选的前导换行符(第一行没有):

    \R?.*
    
  • 但请确保该行不是下一段的标题,即它不是标题分隔线后跟的一行。

    (?!.*\R--------\R)