【发布时间】:2014-07-11 01:05:36
【问题描述】:
取以下字符向量x
x <- c("1 Date in the form", "2 Number of game",
"3 Day of week", "4-5 Visiting team and league")
我想要的结果是下面的向量,每个字符串的第一个大写单词,如果字符串包含-,也是最后一个单词。
[1] "Date" "Number" "Day" "Visiting" "league"
所以不要这样做
unlist(sapply(strsplit(x, "[[:blank:]]+|, "), function(y){
if(grepl("[-]", y[1])) c(y[2], tail(y,1)) else y[2]
}))
为了得到结果,我想我可以尝试将其缩短为正则表达式。结果几乎与sub 中的这个正则表达式“相反”。我已经尝试了各种方法来获得相反的结果,包括不同的[^A-Za-z]+,但都没有成功。
> sub("[A-Z][a-z]+", "", x)
[1] "1 in the form" "2 of game"
[3] "3 of week" "4-5 team and league"
所以我想这是一个两部分的问题。
使用
sub()或gsub(),如何返回"[A-Z][a-z]+"的反面?如何将正则表达式写成类似“匹配第一个大写单词,如果字符串包含
-,也匹配最后一个单词。”? p>
【问题讨论】: