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

tru*_*ype 5 c# regex string special-characters

我最近阅读了很多关于正则表达式的非常有趣的内容.特别是关于创建自己的正则表达式边界

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

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

([A-Z]{2,}\\b)
Run Code Online (Sandbox Code Playgroud)

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

AA -Match

sAB - 没有匹配

AC的-不匹配

!AD -Match

AF!-比赛

我想知道如何只选择两个或多个不带小写字母/数字/符号的大写字母,或者后跟小写字母/数字/特殊字符.

我已经看到人们使用空格,所以要确保字符串以空格开头或以空格结尾,但如果它在行的开头或结尾处不起作用.

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

AA -Match

sAB - 没有匹配

AC的-不匹配

!AD-没有比赛

AF! - 没有比赛

任何帮助表示赞赏.

Wik*_*żew 2

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

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

请参阅正则表达式演示

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

如果在全大写字母后找到相同的字符,则先行(?![a-z\d!@#$%^&*()])查找也会失败。

请在此处查看有关Lookahead 和 Lookbehind 零长度断言的更多详细信息。