【发布时间】:2014-07-22 19:26:05
【问题描述】:
有些字符串显示以下模式
ABC, DEF.JHI
AB,DE.(JH)
一般来说,它包括三个部分,分别用,和.分隔,最后一个字符可以是普通字符,也可以是)之类的东西。我想提取最后一部分。比如我想根据上面的生成如下两个字符串
JHI
(JH)
有没有办法在 R 中做到这一点?
【问题讨论】:
有些字符串显示以下模式
ABC, DEF.JHI
AB,DE.(JH)
一般来说,它包括三个部分,分别用,和.分隔,最后一个字符可以是普通字符,也可以是)之类的东西。我想提取最后一部分。比如我想根据上面的生成如下两个字符串
JHI
(JH)
有没有办法在 R 中做到这一点?
【问题讨论】:
library(stringr)
str1 <- c("ABC, DEF.JHI","AB,DE.(JH)")
str_extract(str1,perl('(?<=\\.).*'))
#[1] "JHI" "(JH)"
(?<=\\.)搜索.后跟.*所有字符
【讨论】:
您可以使用strsplit 在. 上拆分并提取第二个元素。
str1 <- c("ABC, DEF.JHI","AB,DE.(JH)")
unlist(lapply(strsplit(str1, "\\."), "[", 2))
# [1] "JHI" "(JH)"
【讨论】:
这是另一种可能性:
sapply(strsplit(str1, "\\.\\(|\\.|\\)"), "[[", 2)
【讨论】:
根据@josiber 的回答,您可以删除. 之前的字符串部分
str1 <- c("ABC, DEF.JHI","AB,DE.(JH)")
gsub(".*\\.", "", str1)
# [1] "JHI" "(JH)"
编辑
如果您的第三个元素并不总是以. 开头,则提取最后一部分
str1 <- c("ABC, DEF.JHI","AB,DE.(JH)", "ABC.DE, (JH)")
gsub(".*[,.]", "" , str1)
# [1] "JHI" "(JH)" " (JH)"
【讨论】: