Remove part of a string until a character is found R

I have a regex problem or somewhat regex related problem...

I have strings that look like this:

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

I want to remove the initial dot sequence, so that I only get the string starting by the first occurence of ")" symbol. Say, the output would be somthing like:

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

I assume it would be somewhat similar to a lookahead regex but cannot figure out the correct one...

Any help?

Thanks

Upvotes: 1

Views: 94

Answers (3)

Mark
Mark

Reputation: 4537

The way your question is worded, the goal isn't to remove just . from the beginning, but any symbol until the first ) is encountered. So this answer is a more general solution.

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

Alternatively, if you want to stick with base R, you could use sub/gsub like this:

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

Upvotes: 1

akrun
akrun

Reputation: 887711

We match for 0 or more dots (\\.*) from the start (^) of the string and replace it with blank

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

If it needs to start from ), then as above match 0 or more dots till the first ) and replace with the )

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

data

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

Upvotes: 3

C. Braun
C. Braun

Reputation: 5211

You can simply remove dots from the beginning of the line (marked in the regex by ^) until you reach a non-dot character:

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

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

Upvotes: 1

Related Questions