首页 > 解决方案 > 收集重复的 2 组模式

问题描述

我正在寻找将从以下返回的正则表达式

赫胥黎定律有些有趣。还有一些有趣的事情。 达拉斯的法律他的东西很无聊。 虚无法则有些东西。

作为 2 行文本,其中 2 个组已被识别:

  1. 第一组以“法律”开头并以第一个大写字母结束;
  2. 第二组之后开始并在遇到下一个第一组“法律”模式时结束。

我的目标是通过使用这样的捕获组将标题与核心文本分开来重新表述它:

The law of Huxley 
Something interesting. Some other interesting thing. 

The law of Dallas 
This thing is boring.

The law of void
Some stuff.

我试过了

((The law [\w\s]+)([A-Z].+))+

无济于事

标签: regexpcre

解决方案


您可以使用

(The law\s+\w+\s\P{Lu}*)(\p{Lu}.*?)(?=The law|$)

请参阅正则表达式演示

详情

  • (The law\s+\w+\s\P{Lu}*)- 第 1 组:The law文本,然后是一个或多个空格、一个或多个单词字符、一个空格,然后是除大写字母以外的任何零个或多个字符
  • (\p{Lu}.*?)- 第 2 组:一个大写字母,然后是除换行符之外的任何零个或多个字符,尽可能少,直到第一次出现后续子模式
  • (?=The law|$)- 一个正向的前瞻,它要求The law字符串的任一或结尾立即位于当前位置的右侧。

推荐阅读