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

标签 r str-replace stringr

我有以下 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你的代码返回

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

关于r - str_replace_all 不适用于包含括号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67706628/

相关文章:

从单个文本文件读取多个表?

在 Shiny 的数据表中渲染图像

java - 替换 Java 字符串中的短划线字符

r - 用数字和字母分割字符串

r - caret rpart 决策树绘制结果

r - stats::anova 和 car::Anova 在评估 lme4 的线性混合效应模型时的区别

java - 子字符串替换问题

java - 独立(并行)替换字符串中的一组子字符串

r - 每 n 个字符拆分字符串新列

r - 隔离文本中的特定数值