我想提取 R 中字符串向量中“-”之后的所有内容。
例如在:
test = c("Pierre-Pomme","Jean-Poire","Michel-Fraise")
Run Code Online (Sandbox Code Playgroud)
我想得到
c("Pomme","Poire","Fraise")
Run Code Online (Sandbox Code Playgroud)
谢谢 !
我们可以使用sub来匹配字符 ( .*) 直到-替换中的和 指定""
sub(".*-", "", test)
Run Code Online (Sandbox Code Playgroud)
或者另一种选择是 word
library(stringr)
word(test, 2, sep="-")
Run Code Online (Sandbox Code Playgroud)
与str_extract. \\b是匹配字边界的零长度标记。这包括任何非单词字符:
library(stringr)
str_extract(test, '\\b\\w+$')
# [1] "Pomme" "Poire" "Fraise"
Run Code Online (Sandbox Code Playgroud)
我们还可以使用sub. \\1指与第一个捕获组匹配的字符串(.+),它是-末尾a 后面的任何字符一次或多次:
sub('.+-(.+)', '\\1', test)
# [1] "Pomme" "Poire" "Fraise"
Run Code Online (Sandbox Code Playgroud)
str_replace如果已经加载,这也适用:
library(stringr)
str_replace(test, '.+-(.+)', '\\1')
# [1] "Pomme" "Poire" "Fraise"
Run Code Online (Sandbox Code Playgroud)
第三个选项是使用strsplit并从列表的每个元素中提取第二个单词(类似于word@akrun 的回答):
sapply(strsplit(test, '-'), `[`, 2)
# [1] "Pomme" "Poire" "Fraise"
Run Code Online (Sandbox Code Playgroud)
stringr也有 str_split变体:
str_split(test, '-', simplify = TRUE)[,2]
# [1] "Pomme" "Poire" "Fraise"
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为其他答案可能就是您正在寻找的,但如果您不想失去原始上下文,您可以尝试这样的事情:
library(tidyverse)
tibble(test) %>%
separate(test, c("first", "last"), remove = F)
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含原始字符串和组件的数据框,这可能会在以后更有用:
# A tibble: 3 x 3
test first last
<chr> <chr> <chr>
1 Pierre-Pomme Pierre Pomme
2 Jean-Poire Jean Poire
3 Michel-Fraise Michel Fraise
Run Code Online (Sandbox Code Playgroud)