【问题标题】:remove last specific character if next position is a whitespace如果下一个位置是空格,则删除最后一个特定字符
【发布时间】:2021-06-23 15:03:44
【问题描述】:

我试图从字符串列中删除最后一个,,前提是字符串中的下一个位置有空格:

strings <- data_frame(strings= c('[16, 10, 15, ]',
                       '[18, 17, 20]' ,
                       '[Norway, Chile, ]', 
                       '[SQL, Java]'))

# removin ','
strings$strings <- gsub("$,", "",strings$strings)

但是上面的代码返回相同的列,没有任何变化。

输出:

# [16, 10, 15, ]   
# [18, 17, 20]     
# [Norway, Chile, ]
# [SQL, Java]      

预期输出:

# "[16, 10, 15 ]"  
# "[18, 17, 20]" 
# "[Norway, Chile ]" 
# "[SQL, Java]"

如何更改正则表达式模式以获得所需的输出?

【问题讨论】:

    标签: r regex dataframe


    【解决方案1】:

    您可以按如下方式使用sub

    strings$strings <- sub(",(?=\\s+\\])", "", strings$strings, perl=TRUE)
    strings
    
               strings
    1    [16, 10, 15 ]
    2     [18, 17, 20]
    3 [Norway, Chile ]
    4      [SQL, Java]
    

    这里是使用的正则表达式的简要说明:

    ,            match a comma
    (?=\\s+\\])  which is followed by one or more whitespace characters,
                 which in turn are followed by the closing ]
    

    这个正则表达式使用 lookahead 来检查空格,后跟]。应该注意的是,lookaheads 断言但不消耗任何东西,因此实际上只删除了逗号。

    【讨论】:

      【解决方案2】:

      使用捕获组您可以做到这一点

      strings <- data.frame(strings= c('[16, 10, 15, ]',
                                       '[18, 17, 20]' ,
                                       '[Norway, Chile, ]', 
                                       '[SQL, Java]'))
      
      
      gsub('(\\,)(\\s\\])', '\\2', strings$strings)
      #> [1] "[16, 10, 15 ]"    "[18, 17, 20]"     "[Norway, Chile ]" "[SQL, Java]"
      

      reprex package (v2.0.0) 于 2021 年 6 月 23 日创建

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-28
        相关资源
        最近更新 更多