Reputation: 19823
Is there simpler method to match regex pattern in its entirety? For example, to check if given string is uppercase the following 2 methods but seem too complex. Checking stringr I found no indication for simpler solution either.
Method 1:
isUpperMethod1 <- function(s) {
return (all(grepl("[[:upper:]]", strsplit(s, "")[[1]])))
}
Method 2:
isUpperMethod2 <- function(s) {
m = regexpr("[[:upper:]]+", s)
return (regmatches(s, m) == s)
}
I intentionally omit handling of empty, NA, NULL strings to avoid bloated code.
The uppercase pattern can be generalized to arbitrarily regex pattern (or character set).
I see no problems with both solutions above except that they seem excessively complex for the problem solved.
Upvotes: 28
Views: 25551
Reputation: 2155
If you prefer to live in the tidyverse
, here's the version using stringr
:
library(stringr)
str_detect(s, "^[:upper:]+$")
Upvotes: 12
Reputation: 201
Why not just test if the word is identical to itself when converted to upper case with the "toupper" function?
word1 <- "TEST"
word1 == toupper(word1)
will be TRUE
Upvotes: 20
Reputation: 44634
You can use the ^
and $
patterns to match the beginning and end of the string
grepl("^[[:upper:]]+$", s)
Upvotes: 41