Вы можете разделить вашу строку с шаблоном «а не следуют Ъ» с регулярным выражением a(?=[^b])
в strsplit
:
split_str <- strsplit("abcgualoo87ahhabta", "a(?=[^b])", perl=TRUE)[[1]]
split_str
#[1] "abcgu" "loo87" "hhabta"
объяснение расщепленной схеме: опережения ((?=)
) используется с, как «опережения» модель, ничего, кроме Ь ([^b]
) (^ знак указывает на отрицание). Для того, чтобы опережения работать (интерпретироваться), необходимо установить параметр perl
в TURE
После этого вы можете добавить удаленный «а» в конце расщепленных частей, кроме последнего:
split_str <- paste0(c(rep("a", length(split_str)-1), ""))
#[1] "abcgua" "loo87a" "hhabta"
хороший один шаг альтернатива обеспечивается @nicola в комментариях:
split_str <- strsplit("abcgualoo87ahhabta","(?<=a)(?!b)", perl=TRUE)[[1]]
#[1] "abcgua" "loo87a" "hhabta"
Посмотрите на регулярных выражений учебник, который объясняет отрицательный предпросмотр. – Roland
Почему последний 'a' разбит? Не вычисляется с помощью 1-3 элементов, в которых расщепление 'a' является последним символом (а не первым). Попробуйте 'strsplit (string," (? <= A) (?! b) ", perl = TRUE)' и послушайте совет @ Roland. – nicola
@nicola, я добавил вашу строку в свой ответ, чтобы сделать ее более заметной, если вы хотите опубликовать ее как отдельный ответ, позвольте мне не так, чтобы я мог удалить вашу строку (или не стесняйтесь редактировать мой A, чтобы удалить последнюю часть) – Cath