如何在两个不同的标点后删除所有内容

时间:2014-06-03 08:58:23

标签: regex r

考虑

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" 

如何将它们组合成一个表达式?

2 个答案:

答案 0 :(得分:5)

这就是character classes的用途:

> gsub("[ -].*", "", temp)
[1] "12/30" "4/21"

一个警告:在字符类中,短划线具有特殊含义,除非它位于类的第一个或最后一个位置:它表示一个范围(如[0-9]中的0匹配{{1}之间的任何数字1}}和9。如果您只想匹配09或文字-,则必须使用[09-])。在当前的正则表达式中,这不是问题,因为类中只有两个字符。但是当你开始扩展课程(添加新角色)时,请确保将短划线保留在最后。

答案 1 :(得分:0)

你可以将正则表达式联合起来,但我个人觉得很难阅读。更容易在另一个之后应用一个gsub

> gsub("\\-.*", "",gsub("\\ .*", "", temp))
[1] "12/30" "4/21"