I am processing strings in R which are supposed to contain zero or one pair of parentheses. If there are nested parentheses I need to delete the inner pair. Here is an example where I need to delete the parentheses around big bent nachos but not the other/outer parentheses.
test <- c(
"Record ID",
"What is the best food? (choice=Nachos)",
"What is the best food? (choice=Tacos (big bent nachos))",
"What is the best food? (choice=Chips with stuff)",
"Complete?"
)
I know I can kill all the parentheses with the stringr package using str_remove_all():
test |>
stringr::str_remove_all(stringr::fixed(")")) |>
stringr::str_remove_all(stringr::fixed("("))
but I don't have the RegEx skills to pick the inner parentheses. I found a SO post that is close but it removes the outer parentheses and I cant untangle it to remove the inner.
Here you go.
test |>
stringr::str_replace_all("(\\().*\\(", "\\1") |> # remove inner open brackets
stringr::str_remove_all("\\)(?=.*\\))") # remove inner closed brackets
[1] "Record ID"
[2] "What is the best food? (choice=Nachos)"
[3] "What is the best food? (big bent nachos)"
[4] "What is the best food? (choice=Chips with stuff)"
[5] "Complete?"
Fixed my solution, so as to not lose text:
test |>
stringr::str_replace("\\((.*)\\(", "(\\1") |> # remove inner open brackets
stringr::str_remove_all("\\)(?=.*\\))") # remove inner outer brackets
[1] "Record ID"
[2] "What is the best food? (choice=Nachos)"
[3] "What is the best food? (choice=Tacos big bent nachos)"
[4] "What is the best food? (choice=Chips with stuff)"
[5] "Complete?"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With