3

"UPPERCASEWORD UPPERCASEWORD 小写单词 UPPERCASEWORD UPPERCASEWORD"

以下 RegEx 很好地匹配上述模式,但如果中间有数字则无法匹配。\b[AZ][AZ][AZ]+(?:[\sa-z,]+[AZ]+)*\b

“UPPERCASEWORD UPPERCASEWORD 小写字母 1(或任何数字)UPPERCASEWORD UPPERCASEWORD”将不匹配

知道如何在匹配中包含数字吗?我尝试了一些介于 [0-9] 之间的选项,但没有奏效。

4

1 回答 1

3

实际上给定的模式似乎匹配:

  1. 3个或更多大写字符,然后
  2. 1 个或多个小写字符(或逗号或空格),然后
  3. 1 个或多个大写字符

您可能需要这种模式:

\b[A-Z][A-Z][A-Z]+(?:[\sa-z,]+[0-9]*[A-Z]+)*\b

这相当于:

\b[A-Z]{3,}(?:[\sa-z,]+[0-9]*[A-Z]+)*\b

或者,如果您想在小写字母之前只允许 2 个(或可能更多)大写字符,那么:

\b[A-Z]{2,}(?:[\sa-z,]+[0-9]*[A-Z]+)*\b

如果您发布一些测试数据会有所帮助。

更新:听起来你想要的东西与你最初描述的完全不同。会这样做,还是匹配太多?

\b[A-Z]{2}.*[A-Z]{2}\b

如果匹配太多,那么如果您的工具支持负前瞻,那么这可能会起作用,但它变得非常混乱:

\b[A-Z]{2}((?!\b[a-z][a-z'0-9]+\b\s[a-z][a-z'0-9]+).)*[A-Z]{2}\b
于 2012-12-19T05:37:53.760 回答