Замените несколько строк, содержащих различное количество символов, одним gsubfn () - PullRequest
0 голосов
/ 03 января 2019

Здесь Заменить несколько строк в одном операторе gsub () или chartr () в R? поясняется замена нескольких строк одного символа в одном операторе на gsubfn(). E.g.:

x <- "doremi g-k"
gsubfn(".", list("-" = "_", " " = ""), x)
# "doremig_k"

Однако я хотел бы заменить строку 'doremi' в примере на ''. Это не работает:

x <- "doremi g-k"
gsubfn(".", list("-" = "_", "doremi" = ""), x)
# "doremi g_k"

Я полагаю, это из-за того, что строка 'doremi' содержит несколько символов, и я использую метасимвол . в gsubfn. Я понятия не имею, чем его заменить - должен признаться, мне иногда трудно понять, как использовать метасимволы. Таким образом, есть ли способ для меня заменить '-' и 'doremi' сразу?

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Вы можете просто использовать базу R sub здесь:

x <- "doremi g-k"
result <- sub("doremi\\s+([^-]+)-([^-]+)", "\\1_\\2", x)
result

[1] "g_k"
0 голосов
/ 03 января 2019

Просто более общее решение для решения @ RLave -

toreplace <- list("-" = "_", "doremi" = "")
gsubfn(paste(names(toreplace),collapse="|"), toreplace, x)
[1] " g_k"
0 голосов
/ 03 января 2019

Это у вас работает?

gsubfn::gsubfn(pattern = "doremi|-", list("-" = "_", "doremi" = ""), x)
[1] " g_k"

Ключом этого поиска является: "doremi|-", который указывает на поиск либо "doremi", либо "-". Используйте "|" в качестве оператора or.

...