str_replace и сохраняя исходный узор [r] - PullRequest
0 голосов
/ 18 июня 2020

Можно ли сохранить исходный узор при использовании функции str_replace из пакета stringr?

Я привожу здесь пример:

A = "Linear Model"

A %>% str_view("l$")
A %>% str_replace("l$", "(ols)")

# I need results to be Linear Model(ols)

Я полностью осознаю, что мы можем используйте пасту в этом конкретном примере, однако это просто воспроизводимый пример для гораздо более серьезных проблем, которые у меня возникают, и мне нужно решение, используя stringr

1 Ответ

1 голос
/ 18 июня 2020

Немного хака, но общая идея состоит в том, чтобы найти индекс, в котором произошло совпадение, разделить строку на две части из этого индекса и вставить замену между ними, используя paste.

library(stringr)
library(reprex)
#> Warning: package 'reprex' was built under R version 3.6.3

A = "Linear Model"

str_extend = function(string, pattern, replacement){
  matched_index_end = str_locate(string, pattern)[2] #[2] is to extract the end of matching string

  #split given string into two and paste three elements together
  first_part = str_sub(string, 1, matched_index_end)
  second_part = str_sub(string, matched_index_end + 1, length(string))

  paste(first_part, replacement, second_part, sep='')
}

str_extend(A, 'l$', '(ols)')
#> [1] "Linear Model(ols)"

Создано 18.06.2020 с помощью пакета . (v0.3.0)

...