我有正则表达式问题或某些与正则表达式相关的问题...
我的字符串看起来像这样:
"..........))))..)))))))"
"....))))))))...)).))))..))"
"......))))...)))...)))))"
我想删除初始点序列,这样我只得到第一次出现“)”符号的字符串。比如说,输出就像是:
"))))..)))))))"
"))))))))...)).))))..))"
"))))...)))...)))))"
我认为它有点类似于前瞻性正则表达式,但无法弄清楚正确的...
任何帮助?
由于
答案 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("[^\\)]*","","..........))))..)))))))")