你如何在R中grep字符串的某些部分

时间:2015-06-16 19:57:37

标签: regex r

我有这样的字符串:

x<-c("Total_Login.P00B.DC1")

x<-c("Total_Login..P00B.DC1")

我需要在第一个点(。)之后grep everthing并用短划线替换字符串中的任何其他特殊字符( - )

我试过这样的事情

gsub(".*\\.(.*)", "\\1",x)

但是给了我DC1

我需要最终结果:

P00B-DC1

3 个答案:

答案 0 :(得分:4)

我会在.上拆分,删除第一个元素并粘贴在一起:

paste0(strsplit(x,"\\.+")[[1]][-1],collapse="-")
# [1] "P00B-DC1"

对于字符串向量(来自@ akrun的评论):

xvec      <- c("Total_Login.P00B.DC1", "Total_Login..P00B.DC1")

mycleaner <- function(x) paste0(strsplit(x,"\\.+")[[1]][-1],collapse="-")
sapply(xvec, mycleaner)
#  Total_Login.P00B.DC1 Total_Login..P00B.DC1 
#            "P00B-DC1"            "P00B-DC1" 

OP无法定义“特殊字符”,但这似乎适用于示例。

答案 1 :(得分:1)

试试这个:

x<-c("Total_Login.P00B.DC1", "Total_Login..P00B.DC1")
gsub('.*\\.+(.*\\..*)','\\1',x)

答案 2 :(得分:1)

尝试

gsub('[.]', '-', sub('[^.]+\\.+', '', x))
#[1] "P00B-DC1"     "P00B-DC1"     "POOB-DC1-DC2"

数据

x<-c("Total_Login.P00B.DC1", "Total_Login..P00B.DC1", 
           "Total_Login..POOB.DC1.DC2")