匹配首字母缩略词包含大小写字母(至少一个较低的大写字母,如reKHS)或R中的长度为3或更多(CASE,CAT)的大写字母缩略词,应该匹配reKHS和CASE。这个正则表达式处理后一种情况(匹配长度为3或更长的首字母缩略词)regex <- "\\b^[a-zA-Z]*${3,10}\\b";
。需要找到一种方法将它与包含小写和大写的正则表达式结合起来。
答案 0 :(得分:1)
正面前瞻或两个应该解决这个问题
(.*(?=.*[a-z])(?=.*[A-Z]).*)|([A-Z]{3,})
解释:
Either contain a lower and upper case character somewhere
(.*(?=.*[a-z])(?=.*[A-Z]).*)
or
|
have at least 3 upper case characters
([A-Z]{3,})
答案 1 :(得分:0)
您可以使用类似TRE的模式
regex <- "\\b(?:[[:upper:]]{3,10}|(?:[[:lower:]]+[[:upper:]]|[[:upper:]][[:lower:]]*[[:upper:]])[[:alpha:]]*)\\b"
或PCRE正则表达式(与基本R函数中的perl=TRUE
一起使用):
regex <- "\\b(?:\\p{Lu}{3,10}|(?:\\p{Ll}+\\p{Lu}|\\p{Lu}\\p{Ll}*\\p{Lu})\\p{L}*)\\b"
请参见regex demo(和PCRE regex demo)。
详细信息
\\b
-单词边界(?:
-
[[:upper:]]{3,10}
-3至10个大写字母|
-或
(?:
-
[[:lower:]]+[[:upper:]]
-1个或多个小写字母和1个大写字母|
-或
[[:upper:]][[:lower:]]*[[:upper:]]
-大写字母,然后是0+小写字母,然后是大写字母)
-分组结束[[:alpha:]]*
-0个字母以上)
-交替组的结尾\\b
-单词边界。