我正在做一个正则表达式,当文本中包含5到10个大写单词时,它会检测到我。目前,我的正则表达式会检测到文本中的大写字母少于5个单词,以及何时匹配+5。 问题是当您有10个以上但仍匹配时:
我该如何解决?
(?:\b[A-Z]+\b.*){5,10}
答案 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)
说明
^
字符串的开头(?:
非捕获组
(?:
非捕获组
(?!\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
不存在