这个问题与Removing multiple spaces and trailing spaces using gsub非常相似,只是我想将它应用于逗号而不是空格。
例如,我希望函数TrimCommas
将x
转换为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)
,所以我希望比较这个解决方案也有助于解释一些正则表达式的基本原理。
答案 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,用于查看逗号后面是否有逗号,因此它与,
中的,,
匹配,*$
- 这匹配字符串正如你所看到的,所有上述内容都没有替代。
您可以使用此功能将此通用设置为任何字符(" "
,","
等):
TrimMult <- function(x, char=" ") {
return(gsub(paste0("^", char, "*|(?<=", char, ")", char, "|", char, "*$"),
"", x, perl=T))
}