从字符串中提取字符

时间:2017-03-07 04:19:12

标签: r regex

我有一个字符串让我们说

text1 <- "John K Doe"

我想回来:

"John Doe"

"J K Doe"

我使用strsplitpastesubstr如下:

paste(strsplit(text1, " ")[[1]][1], strsplit(text1, " ")[[1]][3])
[1] "John Doe"

paste(substr(text1, 1, 1), strsplit(text1, " ")[[1]][2], strsplit(text1, " ")[[1]][3])
[1] "J K Doe"

如你所见,这是我期待的回报结果。但是,我想看看是否有任何简单或更有效的方法来做到这一点。

谢谢,我感谢所有支持和帮助。

2 个答案:

答案 0 :(得分:4)

使用strsplit()的替代方法是使用带有gsub()的正则表达式。如果您希望在稍后的某个时间点提取名称和缩写的复杂规则,则此选项可能会更有用。

x <- "John K Doe"

gsub("^(\\w+) \\w (\\w+)$", "\\1 \\2", x)
[1] "John Doe"

gsub("^(\\w)\\w* (\\w) (\\w+)$", "\\1 \\2 \\3", x)
[1] "J K Doe"

答案 1 :(得分:1)

这是一种与您的方法基本相似但只运行一次strsplit

的方法
sapply(strsplit(text1," "), function(a) paste(a[1],a[3]))
#OR
sapply(strsplit(text1," "), function(a) paste(a[-2], collapse = " "))
#[1] "John Doe"

sapply(strsplit(text1," "), function(a) paste(substr(a[1],1,1),a[2],a[3]))
#[1] "J K Doe"