Rearrange names
fix_names <- function(x){
if(str_detect(x,',') == TRUE)
return( paste(sub('.*,','' ,x), sub(',.*','' ,x)))
else
return(x)
}
vapply(unlist(names),fix_names ,'',USE.NAMES = FALSE)
## [1] "Moe Szyslak" " C. Montgomery Burns" "Rev. Timothy Lovejoy"
## [4] "Ned Flanders" " Homer Simpson" "Dr. Julius Hibbert"
#using split
fix_names_split <- function(x){
if(str_detect(x,',') == TRUE){
split_names <- unlist(str_split(x,','))
return(paste(split_names[2], split_names[1]))
}
else
return(x)
}
vapply(unlist(names),fix_names_split ,'',USE.NAMES = FALSE)
## [1] "Moe Szyslak" " C. Montgomery Burns" "Rev. Timothy Lovejoy"
## [4] "Ned Flanders" " Homer Simpson" "Dr. Julius Hibbert"
Characters with Title
vapply(unlist(names), function(name) str_detect(name,"[[:alpha:]]{2,3}[.] [[:alpha:]]+"),T,USE.NAMES = TRUE)
## Moe Szyslak Burns, C. Montgomery Rev. Timothy Lovejoy
## FALSE FALSE TRUE
## Ned Flanders Simpson, Homer Dr. Julius Hibbert
## FALSE FALSE TRUE
Characters with second name
vapply(unlist(names), function(name) str_detect(name,"\\b[[:alpha:]]{1}[.]"),T,USE.NAMES = TRUE)
## Moe Szyslak Burns, C. Montgomery Rev. Timothy Lovejoy
## FALSE TRUE FALSE
## Ned Flanders Simpson, Homer Dr. Julius Hibbert
## FALSE FALSE FALSE
‘[0-9]+\$’ . One or more digits, ends with $
regex <-'[0-9]+\\$' #One or more digits ends with $
strs<-c('123$','$123','123','1$','$','1$$','1$3')
vapply(strs, function(x) str_detect(x, regex),T)
## 123$ $123 123 1$ $ 1$$ 1$3
## TRUE FALSE FALSE TRUE FALSE TRUE TRUE
‘\b[a-z]{1,4}\b’. One to four small letters
regex <-'\\b[a-z]{1,4}\\b'
# one to four small letters
strs<-c('a','aa','A','AA','abcd','abcde','AaaA')
vapply(strs, function(x) str_detect(x, regex),T)
## a aa A AA abcd abcde AaaA
## TRUE TRUE FALSE FALSE TRUE FALSE FALSE
’.*?\.txt$’. String ends with .txt
regex <-'.*?\\.txt$'
# string ends with .txt
strs<-c('a.txt','a.b.txt','a.b.c.txt','...txt','a...txt','a....txt','txt','.txt','.txt a')
vapply(strs, function(x) str_detect(x, regex),T)
## a.txt a.b.txt a.b.c.txt ...txt a...txt a....txt txt
## TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## .txt .txt a
## TRUE FALSE
‘<(.+?)>.+?</\1>’. Like html tag.
regex <-'<(.+?)>.+?</\\1>'
#html tag
strs<-c('<b>a</b>','<b>a</B>','<>a</>','<b>1</>', '<a>xyz</b>')
vapply(strs, function(x) str_detect(x, regex),T)
## <b>a</b> <b>a</B> <>a</> <b>1</> <a>xyz</b>
## TRUE FALSE FALSE FALSE FALSE
Bonus
sec_msg <- "clcopCow1zmstc0d87wnkig7OvdicpNuggvhryn92Gjuwczi8hqrfpRxs5Aj5dwpn0Tanwo
Uwisdij7Lj8kpf03AT5Idr3coc0bt7yczjatOaootj55t3Nj3ne6c4Sfek.r1w1YwwojigO
d6vrfUrbz2.2bkAnbhzgv4R9i05zEcrop.wAgnb.SqoU65fPa1otfb7wEm24k6t3sR9zqe5
fy89n6Nd5t9kc4fE905gmc4Rgxo5nhDk!gr"
msg <- unlist(str_extract_all(sec_msg, "[[:upper:].]{1,}"))
msg <- str_replace_all(paste(msg, collapse = ''), "[.]", " ")
msg
## [1] "CONGRATULATIONS YOU ARE A SUPERNERD"