Как использовать список векторов в чередовании (регулярные выражения)

Можно ли разобрать вектор строк символов на элемент чередования в регулярном выражении? Например:

pattern <- "^This\\s(*alternation element*)\\srocks\\."
Animals <- c("cow","dog","cat")

Итак, если бы я затем разобрал «Животные» на регулярное выражение, это привело бы к:

pattern <- "^This\\s(*cow|dog|cat*)\\srocks\\."

В основном он должен работать как or1() из пакета rebus.


person MtH    schedule 01.04.2020    source источник


Ответы (2)


Вы можете использовать paste0 для создания регулярного выражения:

paste0('^This\\s(', paste0(Animals, collapse = "|"), ')\\ssrocks\\.')
#[1] "^This\\s(cow|dog|cat)\\ssrocks\\."

Обратите внимание, что в R вам нужно использовать двойную обратную косую черту (\\).

person Ronak Shah    schedule 01.04.2020

Мы можем использовать sprintf

sprintf("^Thi\\s(%s)\\ssrocks\\.", paste(Animals, collapse="|"))
#[1] "^Thi\\s(cow|dog|cat)\\ssrocks\\."
person akrun    schedule 01.04.2020