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



我正在做一个正则表达式,当文本包含 5 到 10 个大写单词时,它会检测我。目前,我的正则表达式会检测文本何时包含少于 5 个大写字母单词,以及何时具有 +5 个匹配项。 当你有超过 10 个,仍然给出匹配时,问题就来了:

我该如何解决这个问题?

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

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

如果整个字符串应包含 5 到 10 个带有单词边界的大写单词,则可以使用重复 5 - 10 次的临时贪婪标记,并使用负前瞻来断言右侧的内容不是大写单词:

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

正则表达式演示

解释

  • ^字符串开头
  • (?:非捕获组
    • (?:非捕获组
      • (?!b[A-Z]+b).否定前瞻,断言右侧的内容不是b[A-Z]+b,然后使用.匹配除换行符以外的任何字符
    • )*关闭非捕获组并重复 0+ 次
    • b[A-Z]+b匹配字边界,1+乘以大写A-Z和字边界
  • ){5,10}关闭非捕获组并重复 5 - 10 次
  • (?!.*b[A-Z]+b)消极的前瞻,断言正确的b[A-Z]+b
  • 不存在

最新更新