我正在尝试执行查找和替换功能。先前的调查表明,这应该可以通过 stringr::str_replace
和 stringr::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/