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

C# 如何使用正则表达式将前面没有特殊字符的两个大写字母匹配在一起?,c#,regex,string,special-characters,C#,Regex,String,Special Characters,最近我读了很多关于regex的有趣的东西。特别是关于 有一件事我认为我没有看到完成,我确信它已经完成了100%,但我没有注意到任何例子是,如果正则表达式匹配前面有一个“特殊字符”,例如&!%%$,如何排除它。例如: 如果我使用正则表达式注释,这是来自C ([A-Z]{2,}\\b) 它将匹配任何长度为两个或两个以上的大写字母,并使用\b边界确保这两个大写字母不以任何其他字母开头或结尾。但在这里,我不确定这将如何表现: AA-比赛 sAB-没有对手 ACs-没有对手 !!广告匹配 AF-匹配 我

最近我读了很多关于regex的有趣的东西。特别是关于

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

如果我使用正则表达式注释,这是来自C

([A-Z]{2,}\\b)
它将匹配任何长度为两个或两个以上的大写字母,并使用\b边界确保这两个大写字母不以任何其他字母开头或结尾。但在这里,我不确定这将如何表现:

AA-比赛

sAB-没有对手

ACs-没有对手

!!广告匹配

AF-匹配

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

我见过有人使用空格,所以请确保字符串以空格开头或结尾,但如果它在一行的开头或结尾,则这不起作用

因此,我将从上面的示例中寻找输出:

AA-比赛

sAB-没有对手

ACs-没有对手

!!广告-没有对手

AF-没有对手


非常感谢您的帮助。

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

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

您只需使用“向后看”和“向前看”:

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

那个?lookback确保没有您定义的小写字母[a-z]、数字\d或特殊字符。如果有,则匹配失败,不返回任何内容

那个?![a-z\d!@$%^&*]如果在ALLCAPS字母后找到相同的字符,则先行查找也会导致匹配失败


查看有关的更多详细信息。

听起来好像您希望在2大写字母的两侧都有一个单词边界?您指的是哪种符号\p{S}?符号可能是个错误的词。我应该像问题前面那样说特殊字符!@$%^&*是的,我在寻找一个单词边界,两边都不包括字母/数字/特殊字符非常感谢,这是一个很好的解释。我根本没有使用过\d,现在我可以进一步探索“向后看”和“向前看”。谢谢除了\d之外,在C中可以使用\p{N}来匹配数字,但\d较短。只有一个旁注:\d还将匹配所有Unicode数字,如阿拉伯语、希伯来语、印地语等,因此您可能仍希望仅限于ASCII数字,并带有[0-9]。