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

标签 r regex

我有一个如下所示的字符向量:

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

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

也就是说,对 Seventeen 没有任何处理,因此它保持不变,而在实际的解决方案中,我们将其替换为空字符串。

关于返回字符串的开头,最多包含两个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53888906/

相关文章:

regex - 在将其转换为 double 之前从解析的字符串中删除逗号

Javascript 主题标签正则表达式提取 portlet 名称和页码

r - 将日期中的差异分箱为跨年的时间单位感知数值向量

r - 复杂的字符串拆分为 R 中的列

r - 如何根据名称而不是索引选择数据框中的列范围?

javascript - 这个正则表达式有什么问题?

regex - Swift 3 - 如何在正则表达式中提取捕获的组?

javascript - 正则表达式匹配所有单数或双数数字

r - 用 R 计算欧式距离

r - 即使满足测试条件,ifelse 也会基于 else 函数显示警告