考虑
temp <- c("12/30 - 1/5", "4/21-4/27")
##[1] "12/30 - 1/5" "4/21-4/27"
我需要
##[1] "12/30" "4/21"
虽然我知道如何分别制作每一个
gsub(" .*", "", temp)
##[1] "12/30" "4/21-4/27"
gsub("-.*", "", temp)
##[1] "12/30 " "4/21"
如何将它们组合成一个表达式?
答案 0 :(得分:5)
这就是character classes的用途:
> gsub("[ -].*", "", temp)
[1] "12/30" "4/21"
一个警告:在字符类中,短划线具有特殊含义,除非它位于类的第一个或最后一个位置:它表示一个范围(如[0-9]
中的0
匹配{{1}之间的任何数字1}}和9
。如果您只想匹配0
,9
或文字-
,则必须使用[09-]
)。在当前的正则表达式中,这不是问题,因为类中只有两个字符。但是当你开始扩展课程(添加新角色)时,请确保将短划线保留在最后。
答案 1 :(得分:0)
你可以将正则表达式联合起来,但我个人觉得很难阅读。更容易在另一个之后应用一个gsub
:
> gsub("\\-.*", "",gsub("\\ .*", "", temp))
[1] "12/30" "4/21"