繁体   English   中英

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

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

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

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

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

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

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

AA -Match

sAB - 没有匹配

AC-没有匹配

!AD -Match

AF! -比赛

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

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

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

AA -Match

sAB - 没有匹配

AC-没有匹配

!AD - 没有比赛

AF! - 没有比赛

任何帮助表示赞赏。

你只需要使用lookbehind和lookahead:

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

请参阅正则表达式演示

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

如果在ALLCAPS字母后面找到相同的字符,则(?![az\\d!@#$%^&*()])预测也会失败。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM