我如何将两个大写字母匹配在一起;t前面有特殊字符,使用regex

本文关键字:前面 在一起 特殊字符 regex 使用 大写字母 两个 | 更新日期: 2023-09-27 18:28:34

我最近读了很多关于regex的非常有趣的东西。特别是关于创建自己的正则表达式边界

有一件事我认为我没有见过(我已经100%完成了,但我没有注意到任何例子)是如何排除正则表达式匹配,如果它前面有一个"特殊字符",比如&!%$#。例如:

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

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

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

AA-匹配

sAB-无匹配

AC-无匹配

AD-匹配

AF-匹配

我想知道如何只选择两个或两个以上的大写字母,这些字母前面没有小写字母/数字/符号,或者后面有小写字母/号码/特殊字符。

我见过人们使用空格,所以要确保字符串以空格开头或结尾,但如果它在一行的开头或末尾,那就不起作用了。

因此,我从上面的例子中寻找的输出是:

AA-匹配

sAB-无匹配

AC-无匹配

AD-无匹配

AF-无匹配

感谢您的帮助。

我如何将两个大写字母匹配在一起;t前面有特殊字符,使用regex

您只需要使用一个lookbacking和一个lookahead:

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

参见regex演示

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

如果在ALLCAPS字母之后发现相同的字符,则(?![a-z'd!@#$%^&*()])先行查找也会失败。

请在此处查看Lookahead和Lookbehind Zero-Length Assertions的更多详细信息。

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

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