正则表达式如何从多行中获取 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]*)$
希望使用 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]*)$