我有一个看起来像这样的字符向量:
a <- c("Bob/7", "What is this?", "Seventeen")
我想提取字符串的开头,直到并包括斜杠(/
)或空格()。结果应如下所示:
b
[1] "Bob/" "What " NA
不匹配的项目也可以是空字符串或删除而不是返回NA
。
我尝试使用grep("^.+?[/ ]", a, value = TRUE)
,但是它返回匹配的元素而不是匹配的子字符串。
答案 0 :(得分:2)
找到解决方案:
b <- regmatches(a, regexpr("^.+?[/ ]", a))
b
[1] "Bob/" "What "
答案 1 :(得分:2)
这是仅使用sub
的另一种方法:
a <- c("Bob/7", "What is this?", "Seventeen", "AA 1", "AA 7", " AA 7")
sub("(.*?[/ ]|).*", "\\1", a)
# [1] "Bob/" "What " "" "AA " "AA " " "
因此,.*?[/ ]
几乎就是您所拥有的:对于+
向量中的最后一个,我用*
替换了a
。接下来,|
对应于OR,因此a|b
匹配a
或b
。现在让.*?[/ ]|
匹配我们想要的内容,或者如果不存在,我们匹配一个空字符串""
。没有它,我们将得到:
sub("(.*?[/ ]).*", "\\1", a)
# [1] "Bob/" "What " "Seventeen" "AA " "AA " " "
也就是说,Seventeen
不需要做任何事情,因此它保持不变,而对于实际的解决方案,我们将其替换为空字符串。