如何使用正则表达式匹配以大写字母开头且每行有 1 到 10 个单词的行

问题描述 投票:0回答:1

我正在尝试构建一个有效的正则回归,将具有以下约束的多行连接到单行。

  • 第一行以大写字母开头,以冒号字符结尾。
  • 其他连续行包含1至10个单词;第一个单词应以大写字母开头。其余单词可以混合大小写。一行中的所有单词都可以包含 ,-./
  • 等字符

阳性样本:

  1. 我最喜欢的书如下: 一本很棒的书 scala.io 上的有效书籍 试卷

比赛 -> 我最喜欢的书如下: 一本很棒的书 scala.io 上的有效书籍 试卷

  1. 我最喜欢的书如下: 一本很棒的书 又一句话 另一本书

匹配行,直到每行的第一个字母为大写。 -> 我最喜欢的书如下: 一本很棒的书

负样本: 我最喜欢的书如下: 一本好书 又一句话

不匹配

我创建了以下正则表达式,但它匹配每一行,无论它是否以大写字母开头。

(^[A-Z].*:)\n(^[A-Z].+(?:\s+[a-zA-Z0-9,.\/ ]+){1,10})

如果上面的正则表达式与预期的行匹配,我将替换 ' ' 带有空格和逗号。

java regex scala
1个回答
0
投票

您可以使用此正则表达式来获取匹配项:

^[A-Z][^:\n]*:\n(?:[A-Z][a-zA-Z,./-]*(?:\h+[a-zA-Z,./-]+){0,9}\n)+

正则表达式演示

© www.soinside.com 2019 - 2024. All rights reserved.