我需要根据另一个正则表达式将字符串拆分为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
感谢您的帮助。
答案 0 :(得分:2)
您可以使用此正则表达式进行匹配:
/^Start Point \d+(?:\n.+)*(?=\n\n|\z)/gm
在多行模式下。
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))
看起来更简单。