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

时间:2019-05-05 01:55:06

标签: regex-group

希望使用Regex从多行中提取3组行 第一组和最后一组是已知数量的行。金额可能因列表而异,但始终是已知的。 中间的组是中间留有多少行。 文本将始终至少包含顶部和底部组的行数,因此无需检查是否有足够的行

我已将下面代码中显示的内容应用于以下示例文本:

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

1 个答案:

答案 0 :(得分:0)

首先,应删除“ m”标志并设置“ s”。它将允许您将整个文本视为单行(而不是将regexp应用于每行的多行文本)。

第二,学习“不舒适的”修饰语。表达式.*\n将匹配整个文本,因为*是贪婪的,.*?\n将匹配一行,因为*?是贪婪的。

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

但是,您可以不使用数字量词进行重写:)

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

链接https://regex101.com/r/orjKVI/2