2014-02-24 67 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

相關問題