str_replace (пакет stringr) не может заменить скобки в r?

StackOverflow https://stackoverflow.com//questions/23065378

  •  26-12-2019
  •  | 
  •  

Вопрос

У меня есть строка, скажем

 fruit <- "()goodapple"

Я хочу удалить скобки в строке.Я решил использовать пакет stringr, поскольку он обычно справляется с подобными проблемами.Я использую :

str_replace(fruit,"()","")

Но ничего не заменяется, а заменяется следующее:

[1] "()good"

Если я хочу заменить только правую половину кронштейна, это работает:

str_replace(fruit,")","") 
[1] "(good"

Однако левая полускобка не работает:

str_replace(fruit,"(","")

и отображается следующая ошибка:

Error in sub("(", "", "()good", fixed = FALSE, ignore.case = FALSE, perl = FALSE) : 
 invalid regular expression '(', reason 'Missing ')''

У кого-нибудь есть идеи, почему это происходит?Как тогда удалить «()» в строке?

Это было полезно?

Решение

Выход из круглых скобок делает это...

str_replace(fruit,"\\(\\)","")
# [1] "goodapple"

Вы также можете рассмотреть возможность изучения пакет «стринги», который имеет аналогичный подход к «stringr», но имеет более гибкие функции.Например, есть stri_replace_all_fixed, что было бы полезно здесь, поскольку ваша строка поиска представляет собой фиксированный шаблон, а не шаблон регулярного выражения:

library(stringi)
stri_replace_all_fixed(fruit, "()", "")
# [1] "goodapple"

Конечно, базовый gsub прекрасно справляется и с этим:

gsub("()", "", fruit, fixed=TRUE)
# [1] "goodapple"

Другие советы

Принятый ответ работает для вашей точной проблемы, но не для более общей проблемы:

my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace(my_fruits,"\\(\\)","")
## "goodapple"  "(bad)apple", "(funnyapple"
.

Это потому, что регулярное выражение точно совпадает с «(« с последующим «)».

Предполагая, что вы заботитесь только о парах кронштейна, это более сильное решение:

str_replace(my_fruits, "\\([^()]{0,}\\)", "")
## "goodapple"   "apple"       "(funnyapple"
.

Создание ответа MJH, это удаляет все (или):

my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace_all(my_fruits, "[//(//)]", "")

[1] "goodapple"  "badapple"   "funnyapple"
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top