str_replace_all 不适用于包含括号的字符串

str_replace_all doesn't work with strings that contains parenthesis

我有以下df

library(tidyverse)

a <- tibble(country = c(
     "Bolivia (Estado Plurinacional de)",
     "Corea del Sur (República de)",
     "Reino Unido de Gran Bretaña e Irlanda del Norte",
     "Venezuela (República Bolivariana de)",
     "Congo (República Democrática del)",
     "República Árabe Siria"
))

然后,我尝试用 str_replace_all 函数

替换国家
dict <- c(
 "Bolivia (Estado Plurinacional de)" = "Bolivia",
 "Corea del Sur (República de)" = "Corea del Sur",
 "Reino Unido de Gran Bretaña e Irlanda del Norte" = "Reino Unido",
 "Venezuela (República Bolivariana de)" = "Venezuela",
 "Congo (República Democrática del)" = "Congo",
 "República Árabe Siria" = "Siria"
)

a$country %>% str_replace_all(pattern = dict)

但代码不适用于所有字符串,例如委内瑞拉 (República Bolivariana de) 或刚果 (República Democrática del)。有人可以帮我解决这个问题吗?

非常感谢

只需将您的字典替换为

dict <- c(
  "Bolivia \(Estado Plurinacional de\)" = "Bolivia",
  "Corea del Sur \(República de\)" = "Corea del Sur",
  "Reino Unido de Gran Bretaña e Irlanda del Norte" = "Reino Unido",
  "Venezuela \(República Bolivariana de\)" = "Venezuela",
  "Congo \(República Democrática del\)" = "Congo",
  "República Árabe Siria" = "Siria"
)

在正则表达式中,括号是特殊字符。所以你必须使用转义字符,在这种情况下 \(\) 而不是 ().

使用这个新的 dict 您的代码 returns

> a$country %>% str_replace_all(pattern = dict)
[1] "Bolivia"       "Corea del Sur" "Reino Unido"   "Venezuela"     "Congo"         "Siria"