r - tidyverse/stringr 如何查找和替换完全匹配的内容

标签 r tidyverse stringr

我正在尝试执行查找和替换功能。先前的调查表明,这应该可以通过 stringr::str_replacestringr::str_replace_all 实现。但是,我遇到了问题,因为较长字符串中的部分匹配会导致不需要的结果。我希望模式参数匹配整个字符串而不仅仅是字符串的一部分;当它只是一部分时,我希望替换操作忽略该单元格。我非常感谢任何有关如何最好在 mutate 语句中完成精确匹配查找和替换操作的见解。

library(tidyverse)
df <- tribble(
  ~col1,
  "foo",
  "foo bar",
  "foo",
  "foo bar",
  "pizza"
)

然后进行查找和替换,我看到的通常是以下内容:

df %>% 
  mutate(col1 = str_replace_all(col1, pattern = "foo", replacement = "foo bar"))

不幸的是,这会产生不需要的结果:

foo bar             
foo bar bar             
foo bar             
foo bar bar
pizza

我希望得到:

foo bar             
foo bar         
foo bar             
foo bar
pizza

提前致谢。

最佳答案

也许您需要负向前瞻。让我向您展示一个修改后的示例 -

library(tidyverse)
df <- tribble(
  ~col1,
  "foo pizza",
  "foo bar",
  "foo",
  "foo bar",
  "pizza"
)

df
#> # A tibble: 5 x 1
#>   col1     
#>   <chr>    
#> 1 foo pizza
#> 2 foo bar  
#> 3 foo      
#> 4 foo bar  
#> 5 pizza

df %>% mutate(col1 = str_replace(col1, 'foo(?!\\sbar)', 'foo bar'))
#> # A tibble: 5 x 1
#>   col1         
#>   <chr>        
#> 1 foo bar pizza
#> 2 foo bar      
#> 3 foo bar      
#> 4 foo bar      
#> 5 pizza

reprex package于2021年6月26日创建(v2.0.0)

关于r - tidyverse/stringr 如何查找和替换完全匹配的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68138112/

相关文章:

r - 为什么随机值会产生模式?

r - 从谷歌街道地址中提取城市和州信息

r - 将列添加到分组数据,将 1 分配给个人并随机分配 1 或 0 给对

R - 查找包含所有搜索词的所有向量元素的快速方法

r - 为什么 stringr::str_detect 无法检测到我的字符串?

r - 在函数内保存 mirt 的绘图

r - 使用 geom_boxplot 产生的结果与基本 boxplot() 不同

R中读取List excel然后执行操作(二)

在调用 mutate() 时引用上一列/下一列

r - 为矩阵模拟 reshape2::melt 与 pivot_longer