我正在做一个正则表达式,当文本包含 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
不存在