Поиск каждого n символов в строке для шаблона - PullRequest
0 голосов
/ 07 июня 2019

Допустим, у меня есть строка ABCC321BB321A.Я хочу найти шаблон, который состоит из ABC...321, где ... может быть любым символом (ами).Однако я хочу вернуть только результаты, в которых символы в подстроке можно сгруппировать в наборы по 3.

Например, я не хочу ABCC321 (ABC - C32 - 1), но хочу ABCC321BB321 (ABC - C32 - 1BB - 321).

Как бы я это сделал в R?Можно ли добиться с помощью регулярных выражений?Я предполагаю, что мог бы разбить строку на список, содержащий группы из 3, или использовать условные выражения, чтобы вернуть только те совпадения, которые делятся на 3, чтобы получить желаемый ответ, но я предполагаю, что есть более эффективный метод.

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Попробуйте это:

x <- "ABCC321BB321A"
threes <- regmatches(x, gregexpr(".{3}", x))[[1]]
threes
paste(threes, collapse = "-")

, который производит:

[[1]]
[1] "ABC" "C32" "1BB" "321"

и

[1] "ABC-C32-1BB-321"
0 голосов
/ 07 июня 2019

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

mystrings <- c("ABCC321BB321A", "ABCC321")

mypattern <- "ABC321"

sapply(strsplit(mystrings, "(?<=.{3})", perl = TRUE), function(x) all(strsplit(mypattern, "(?<=.{3})", perl = TRUE)[[1]] %in% x) )

[1]  TRUE FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...