返回字符串的开头,最多包括两个字符

时间:2018-12-21 17:47:14

标签: r regex

我有一个看起来像这样的字符向量:

a <- c("Bob/7", "What is this?", "Seventeen")

我想提取字符串的开头,直到并包括斜杠(/)或空格()。结果应如下所示:

b
[1] "Bob/"  "What " NA 

不匹配的项目也可以是空字符串或删除而不是返回NA

我尝试使用grep("^.+?[/ ]", a, value = TRUE),但是它返回匹配的元素而不是匹配的子字符串。

2 个答案:

答案 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匹配ab。现在让.*?[/ ]|匹配我们想要的内容,或者如果不存在,我们匹配一个空字符串""。没有它,我们将得到:

sub("(.*?[/ ]).*", "\\1", a)
# [1] "Bob/"      "What "     "Seventeen" "AA "       "AA "       " "   

也就是说,Seventeen不需要做任何事情,因此它保持不变,而对于实际的解决方案,我们将其替换为空字符串。