正则表达式如何从多行中获取 3 组行

Regex how to get 3 groups of lines out of multiple lines

希望使用 Regex 从多行中获取 3 组行 第一组和最后一组是已知数量的行。数量可能因列表而异,但始终是已知的。 中间的组是中间留下的任何行数。 文本总是至少有 top + bottom 组的行数,所以不需要检查是否有足够的行数

我得到了下面代码中显示的内容,应用于以下示例文本:

This could
be "words"
or any text
or pattern
or any amount of lines
need 3 groups:
1 -> lines 1 to 2
2 -> lines leftover
3 -> last 3 lines

为了实现这一目标,我做到了这一点:

^((.*\n){1,2})(.*)((.*\n){0,2}.*\n?\z)

但它没有给出预期的结果

预期结果是:

第 1 组是第 1 行和第 2 行 第 3 组是最后 3 行 第2组是

之间留下的线

实际效果可见here

首先,您应该删除 "m" 标志并设置 "s"。它将允许您将整个文本视为单行(而不是将正则表达式应用于每一行的多行文本)。

其次,学习"ungreedy"修饰符。表达式 .*\n 将匹配整个文本,因为 * 是贪婪的,.*?\n 将匹配一行,因为 *? 是不贪婪的。

第三,这个在线验证器是错误的,特别是它对数字量词的支持被破坏了。例如,^(.+?[\n]+){1}(.*?)$ 正确匹配第一行和其余行。但是,如果我更改为 {2} 然后它匹配第二行而不是前两行。

不过,您可以在不使用数字量词的情况下重写 :)

^([^\n]+?[\n][^\n]+?[\n])((?:[^\n]+?\n)*?)([^\n]+?[\n][^\n]+?[\n][^\n]+?[\n]*)$

Link https://regex101.com/r/orjKVI/2