查找文本是否包含5到10个大写单词

时间:2019-04-20 12:46:46

标签: regex

我正在做一个正则表达式,当文本中包含5到10个大写单词时,它会检测到我。目前,我的正则表达式会检测到文本中的大写字母少于5个单词,以及何时匹配+5。 问题是当您有10个以上但仍匹配时:

我该如何解决?

(?:\b[A-Z]+\b.*){5,10}

1 个答案:

答案 0 :(得分:2)

此模式(?:\b[A-Z]+\b.*){5,10}匹配\b[A-Z]+\b,然后匹配.*,它将匹配除换行符以外的所有内容,因此不考虑大写单词。

如果整个字符串应包含5到10个带有单词边界的大写单词,则可以使用temporary greedy token重复5-10次,并使用否定的前瞻来断言右边的内容不是大写单词:

^(?:(?:(?!\b[A-Z]+\b).)*\b[A-Z]+\b){5,10}(?!.*\b[A-Z]+\b)

Regex demo

说明

  • ^字符串的开头
  • (?:非捕获组
    • (?:非捕获组
      • (?!\b[A-Z]+\b).负向查找,断言右边的不是\b[A-Z]+\b,然后使用.匹配除换行符以外的任何字符
    • )*关闭非捕获组并重复0次以上
    • \b[A-Z]+\b匹配单词边界,是大写A-Z和单词边界的1+倍
  • ){5,10}关闭非捕获组并重复5-10次
  • (?!.*\b[A-Z]+\b)负向前进,断言右边的\b[A-Z]+\b不存在