希望使用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
答案 0 :(得分:0)
首先,应删除“ m”标志并设置“ s”。它将允许您将整个文本视为单行(而不是将regexp应用于每行的多行文本)。
第二,学习“不舒适的”修饰语。表达式.*\n
将匹配整个文本,因为*
是贪婪的,.*?\n
将匹配一行,因为*?
是贪婪的。
第三,这个在线验证器是错误的,特别是它对数字量词的支持被破坏了。例如,^(.+?[\n]+){1}(.*?)$
正确匹配第一行和其余行。但是,如果我更改为{2}
,则它匹配第二行而不是前两行。
但是,您可以不使用数字量词进行重写:)
^([^\n]+?[\n][^\n]+?[\n])((?:[^\n]+?\n)*?)([^\n]+?[\n][^\n]+?[\n][^\n]+?[\n]*)$