删除字符串的一部分,直到找到一个字符R.

时间:2018-04-11 17:15:06

标签: r string split lookahead

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

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

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

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

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

我认为它有点类似于前瞻性正则表达式,但无法弄清楚正确的...

任何帮助?

由于

3 个答案:

答案 0 :(得分:3)

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

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

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

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

数据

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

答案 1 :(得分:1)

你可以简单地从行的开头删除点(在^的正则表达式中标记),直到你找到一个非点字符:

a <- "..........))))..)))))))"
b <- "....))))))))...)).))))..))"
c <- "......))))...)))...)))))"

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

答案 2 :(得分:1)

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

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

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

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