我正在寻找一种从文本文档中捕获文本及其段落标题的方法。
文字档案:
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(?=(.*))
做了一些尝试但无济于事。任何指导都会很棒。
答案 0 :(得分:1)
以下正则表达式将会:
(?!--------\R)(.*)\R--------\R((?:\R?(?!.*\R--------\R).*)+)
请参阅regex101。
标题分隔线(--------
)也可以指定为-{8}
,如果需要,可以更容易地调整为可变长度,例如而不是正好8个破折号,它可以是6个或更多:-{6,}
说明:
捕获一行文字(段落标题):
(.*)\R
.
不匹配换行符\R
匹配换行符,包括Windows CRLF对。如果您的正则表达式引擎不支持\R
,请使用\r?\n
作为简单替代方案。确保捕获的文本不是标题分隔线:
(?!--------\R)
跳过强制标题分隔线:
--------\R
捕获段落文本,作为重复的行组:
((?:xxx)+)
一行有一个可选的前导换行符(第一行没有一行):
\R?.*
但请确保该行不是下一段的标题,即它不是一行后跟标题分隔线。
(?!.*\R--------\R)