如何使用正则表达式将前面没有特殊字符的两个大写字母匹配在一起?

How can I match two capital letters together, that aren't preceded by special characters, using regex?

我最近阅读了很多关于正则表达式的非常有趣的东西。特别是关于 creating your own regex boundaries

有一件事我认为我没有完成(我 100% 已经完成,但我没有注意到任何示例)是如何排除正则表达式匹配,如果它前面有'special character',如&! % $ #。例如:

如果我使用正则表达式(注意这是来自 C#)

([A-Z]{2,}\b)

它将匹配任何两个或两个以上长度的大写字母,并使用 \b 边界来确保两个大写字母不以任何其他字母开头或结尾。但这里是我不确定它会如何表现的地方:

AA -匹配

sAB -不匹配

AC -不匹配

!AD -匹配

AF! -匹配

我想知道如何 select 只有两个或多个大写字母且前面没有小写字母 letter/number/symbol,或后面没有小写字母 letter/number/special .

我见过有人使用 spaces,因此请确保字符串以 space 开头或结尾,但如果它位于 space 的开头或结尾则不起作用行。

所以,我从上面的例子中寻找的输出是:

AA -匹配

sAB -不匹配

AC -不匹配

!AD -不匹配

AF! -不匹配

感谢任何帮助。

我认为在您拥有的模式之前加上小写字母的否定和您想要排除的任何符号就足够了。我的示例仅排除 !,但您可以根据需要添加到列表中。 ^ 括号内否定其中的内容。因此,例如,您可以合并模式

/[^a-z!][A-Z]{2,}[^a-z!]/g

你只需要使用后视和前视:

(?<![a-z\d!@#$%^&*()])[A-Z]{2,}(?![a-z\d!@#$%^&*()])

regex demo

(?<![a-z\d!@#$%^&*()]) 回顾确保没有您定义的小写字母 ([a-z])、数字 (\d) 或特殊字符。如果有,则匹配失败,不返回任何内容。

如果在 ALLCAPS 字母后发现相同的字符,(?![a-z\d!@#$%^&*()]) 前瞻也会失败。

查看 Lookahead and Lookbehind Zero-Length Assertions here 的更多详细信息。