正则表达式拆分大文本

时间:2015-02-25 10:53:11

标签: regex

我的文字看起来像这样:

HEADING

Some random text which is not capitalized. Heading are always in their own line and capitalized.

HEADINGHHHH
Some other random text.

我想将此文本分为两部分:

1.part:
 HEADING

Some random text which is not capitalized. Heading are always in their own line and capitalized.

2.part : HEADINGHHHH
Some other random text.

所以基本上,我想用大写标题“拆分”,每个对象必须包含带有文本的标题,直到下一个标题。

我试过

(([A-Z]+\\s?)+)$

但这不起作用。

1 个答案:

答案 0 :(得分:1)

以下works

/\G([A-Z]+\n+[\s\S]*?(?=\n+[A-Z]+\n|$))\n*/g

即。一个'标题'及其后的所有内容(非贪婪),直到有一个新的'标题'。

请注意,这是一个全局匹配,而不是split()。另请注意,它使用了前瞻,因此无论您使用哪种引擎都必须支持它。

这是一个hack,所以如果你可以使用基于行的解析器,也许与正则表达式结合使用,我建议你这样做。


另一种方法是使用可以保存分隔符的split()(我知道Perl可以,而IIRC也可以使用JavaScript)。

例如Perl:

split /^([A-Z]+)$/m, $text;

但是,这会在列表中的每个其他元素中添加一个标题,并将其内容放在其他元素中。

另一种选择是以前瞻的方式分开,例如, /^(?=[A-Z]+$)/m