【问题标题】:Removing multiple commas and trailing commas using gsub使用 gsub 删除多个逗号和尾随逗号
【发布时间】:2014-04-24 16:00:39
【问题描述】:

这个问题与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("^ *|(?&lt;= ) | *$", "", x, perl=T),所以我希望比较这个解决方案也有助于解释一些正则表达式的基础知识。

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

    解决方案是不是很相似?

    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"
    

    正则表达式^,*|(?&lt;=,),|,*$分为三个部分:

    • ^,* -- 匹配字符串开头的 0 个或多个逗号
    • (?&lt;=,), -- 这是一个positive lookbehind,看逗号后面是否有逗号,所以它匹配,,中的,
    • ,*$ -- 匹配字符串末尾的 0 个或多个逗号

    如您所见,以上所有内容均被替换。

    您可以使用此函数将其泛化为任何字符(" ""," 等):

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

    【讨论】:

    • +1。只是想知道我是否需要将后面的正面外观替换为“1”,我该怎么做??
    • @Shambho 你能举例输入和输出吗?
    • 输入:x &lt;- c("a,b,c", ",a,b,,c", ",,,a,,,b,c,,,"),输出o &lt;- c("a,b,c", ",a,b,1,c", "a,1,b,c")
    • @Shambho 这是一个完全不同的例子。你可以ask a question 代替吗?
    • 感谢@devnull,特别是对三个组件的解释。
    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2021-05-16
    • 2012-05-20
    • 2017-01-10
    相关资源
    最近更新 更多