2014-02-24 37 views
12

是否有更简单的方法来匹配整个正则表达式模式?例如,要检查给定的字符串是否大写以下两种方法,但看起来太复杂。检查stringr我发现没有更简单的解决方案的迹象。检查字符串在R中是否大写

方法1:

isUpperMethod1 <- function(s) { 
    return (all(grepl("[[:upper:]]", strsplit(s, "")[[1]]))) 
} 

方法2:

isUpperMethod2 <- function(s) { 
    m = regexpr("[[:upper:]]+", s) 
    return (regmatches(s, m) == s) 
} 

我故意省略空,NA,NULL字符串的处理,以避免膨胀的代码。

大写模式可以概括为任意的正则表达式模式(或字符集)。

我发现上述两种解决方案都没有问题,只是它们似乎对于解决的问题过于复杂。

+13

单曲== TOUPPER(S)'? – Justin

+0

我想将解决方案推广到更复杂的模式。 – topchef

+4

为什么不''grepl(“^ [[:upper:]] + $”,s)'? –

回答

19

您可以使用^$模式相匹配的字符串

grepl("^[[:upper:]]+$", s) 
8

为什么不只是测试,如果在与“TOUPPER”功能转换为大写的字是与自身的开始和结束?

word1 <- "TEST" 
word1 == toupper(word1) 

TRUE

+0

这个问题有其评论中讨论的“概括”条款。 – topchef

相关问题