正则表达式基于正则表达式将字符串拆分为N个匹配项

时间:2018-11-06 17:09:45

标签: regex

我需要根据另一个正则表达式将字符串拆分为N个匹配项:

输入文字:

Start Point 123
some random text
some random text
some random text

Start Point 234
some other random text

Start Point 345
some more random text

我想分割的正则表达式是:

(Start Point \d+)

当我在正则表达式中运行此代码时,我需要以下3个匹配项:

匹配1

Start Point 123
some random text
some random text
some random text

第2场

Start Point 234
some other random text

第3场

Start Point 345
some more random text

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式进行匹配:

/^Start Point \d+(?:\n.+)*(?=\n\n|\z)/gm

在多行模式下。

RegEx Demo

RegEx详细信息:

  • ^Start Point \d+:匹配Start Point,然后在行首匹配一个空格和1+个数字。
  • \n:匹配换行符
  • .+:匹配到行尾
  • (?:\n.+)*:匹配0个或多个分组表达式
  • (?=\n\n|\z):先行断言我们前面有2个换行符或输入结束符

答案 1 :(得分:1)

据我所知,op希望使用正则表达式将一堆文本(包含多行)分割为多个块,以匹配块的开头。这是我建议的解决方案:

((?:__REGEX__)(?:.+|\n)+?(?=(?:__REGEX__)|\z))
  • __REGEX__替换为与开头匹配的表达式 一个块。

  • (?:.+|\n)+?将捕获其余的块。

  • (?=(?:__REGEX__)|\z)前瞻以确保我们只是 捕获到下一个块或缓冲区/字符串(\z)的末尾。

Demo,其中__REGEX__Start Point \d+

还请注意,如果设置了单行标志,则(?:.+|\n)只能用通配符.替换,从而使表达式((?:__REGEX__).+?(?=(?:__REGEX__)|\z))看起来更简单。