I ended up with this solution (in case of keywords the upper/lower case is corrected):
library(tidyverse)
df = tibble(name = c("aaa aa aa DFGH aa",
"aa dfgh",
"QWER aaaa",
"a qwer a"))
keywords = c("dFgH",
"QweR",
"cVBn")
correct_case <- function(df, keyword, column){
df %>%
mutate({{column}} := str_replace_all({{column}}, paste0("(?i)", keyword), keyword))
}
df %>% reduce(keywords, correct_case, .init = ., column = name)
#> # A tibble: 4 x 1
#> name
#> <chr>
#> 1 aaa aa aa dFgH aa
#> 2 aa dFgH
#> 3 QweR aaaa
#> 4 a QweR a