使用gsub删除多个逗号和尾随逗号

时间:2014-04-24 16:00:39

标签: regex r gsub

这个问题与Removing multiple spaces and trailing spaces using gsub非常相似,只是我想将它应用于逗号而不是空格。

例如,我希望函数TrimCommasx转换为y

x <- c("a,b,c", ",a,b,,c", ",,,a,,,b,c,,,")
# y <- TrimCommas(x) # presumably
y <- c("a,b,c", "a,b,c", "a,b,c")

空间的解决方案是gsub("^ *|(?<= ) | *$", "", x, perl=T),所以我希望比较这个解决方案也有助于解释一些正则表达式的基本原理。

1 个答案:

答案 0 :(得分:13)

解决方案不是很相似吗?

x <- c("a,b,c", ",a,b,,c", ",,,a,,,b,c,,,")
gsub("^,*|(?<=,),|,*$", "", x, perl=T)
# [1] "a,b,c" "a,b,c" "a,b,c"

正则表达式^,*|(?<=,),|,*$有三个部分:

  • ^,* - 这匹配字符串开头的0或更多逗号
  • (?<=,), - 这是一个positive lookbehind,用于查看逗号后面是否有逗号,因此它与,中的,,匹配
  • ,*$ - 这匹配字符串
  • 末尾的0个或多个逗号

正如你所看到的,所有上述内容都没有替代。

您可以使用此功能将此通用设置为任何字符(" "","等):

TrimMult <- function(x, char=" ") {
  return(gsub(paste0("^", char, "*|(?<=", char, ")", char, "|", char, "*$"),
              "", x, perl=T))
}
相关问题