用于在两个 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)
我正在寻找一种从文本文档中捕获文本及其段落标题的方法。
文本文件:
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)