我有一个如下所示的字符向量:
a <- c("Bob/7", "What is this?", "Seventeen")
我想提取字符串的开头,直到并包括斜杠(/
)或空格()。结果应该如下所示:
b
[1] "Bob/" "What " NA
不匹配的项也可以是空字符串或被删除,而不是返回 NA
。
我尝试过使用 grep("^.+?[/]", a, value = TRUE)
,但它返回匹配的元素而不是匹配的子字符串。
最佳答案
这是另一种仅使用 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
没有任何处理,因此它保持不变,而在实际的解决方案中,我们将其替换为空字符串。
关于返回字符串的开头,最多包含两个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53888906/