【问题标题】:Gather a repeating 2-group pattern收集重复的 2 组模式
【发布时间】:2021-02-21 21:02:59
【问题描述】:

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

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

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

  1. 第一组以“The law”开头并在第一个大写字母处结束;
  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].+))+

无济于事

【问题讨论】:

  • 您使用的是什么编程语言或正则表达式风格?
  • 您的具体要求是什么?从The law,下一个单词,然后直到下一个开始下一个捕获的大写字母,直到下一个The law或字符串的结尾,匹配并捕获所有内容? (The law\s+\w+\s\P{Lu}*)(\p{Lu}.*?)(?=The law|$) (demo)?
  • 还是在第一个大写单词之后? regex101.com/r/1XfTpG/1
  • 你做得很好@WiktorStribiżew;我实际上是在寻找使用捕获组分离一些与核心文本混合的标题。我错过了积极的前瞻性部分让它起作用。感谢您的时间。不要犹豫,发布回复,以便我可以将其标记为一个好的答案

标签: regex pcre


【解决方案1】:

你可以使用

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

请参阅regex demo

详情

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2020-03-25
    • 2016-11-23
    • 2019-11-19
    • 2021-04-20
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多