【问题标题】:Remove part of a string until a character is found R删除字符串的一部分,直到找到一个字符 R
【发布时间】:2018-04-11 17:15:05
【问题描述】:

我有一个正则表达式问题或一些与正则表达式相关的问题...

我的字符串看起来像这样:

"..........))))..)))))))"
"....))))))))...)).))))..))"
"......))))...)))...)))))"

我想删除初始的点序列,这样我就只能得到以第一次出现“)”符号开始的字符串。比如说,输出会是这样的:

"))))..)))))))"
"))))))))...)).))))..))"
"))))...)))...)))))"

我认为它有点类似于前瞻正则表达式,但无法找出正确的...

有什么帮助吗?

谢谢

【问题讨论】:

    标签: r string split lookahead


    【解决方案1】:

    我们从字符串的开头 (^) 匹配 0 个或多个点 (\\.*) 并将其替换为空白

    sub("^\\.*", "", v1)
    #[1] "))))..)))))))"          "))))))))...)).))))..))" "))))...)))...)))))"    
    

    如果需要从)开始,则如上匹配0个或多个点直到第一个)并替换为)

    sub("^\\.*\\)", ")", v1)
    #[1] "))))..)))))))"          "))))))))...)).))))..))" "))))...)))...)))))"    
    

    数据

    v1 <- c("..........))))..)))))))", "....))))))))...)).))))..))", "......))))...)))...)))))")
    

    【讨论】:

      【解决方案2】:

      您可以简单地从行首删除点(在正则表达式中由 ^ 标记),直到到达非点字符:

      a <- "..........))))..)))))))"
      b <- "....))))))))...)).))))..))"
      c <- "......))))...)))...)))))"
      
      sub("^\\.*", "", a) # "))))..)))))))"
      sub("^\\.*", "", b) # "))))))))...)).))))..))"
      sub("^\\.*", "", c) # "))))...)))...)))))"
      

      【讨论】:

        【解决方案3】:

        按照您的问题的措辞方式,目标不仅仅是删除 .从头开始,但遇到第一个 ) 之前的任何符号。所以这个答案是一个更通用的解决方案。

        stringr::str_extract("..........))))..)))))))","\\).*$")
        

        或者,如果你想坚持使用 base R,你可以像这样使用 sub/gsub:

        gsub("[^\\)]*(\\).*$)","\\1","..........))))..)))))))")
        sub("[^\\)]*","","..........))))..)))))))")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-31
          • 2020-03-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多