Ответ 1
Это будет сделано:
gsub(" : .*?L", "", str)
#[1] "F14" "W15, W15" "W15, F14, F14"
У меня есть строка.
str = c("F14 : M114L","W15 : M116L, W15 : M118L","W15 : D111L, F14 : E112L, F14 : M116L")
Цель состоит в том, чтобы удалить что-либо между: и L (также включает в себя пробел прямо перед:), чтобы в итоге я имел
"F14", "W15, W15", "W15, F14, F14"
Я думаю, используя
gsub(" : [[:alnum:]]L", "", str)
Но это явно не работает. Не знаю, есть ли что-то вроде шаблона, который может представлять любое количество цифр и символов между: и L.
Это будет сделано:
gsub(" : .*?L", "", str)
#[1] "F14" "W15, W15" "W15, F14, F14"
Вы можете легко сделать это с помощью пакета qdapRegex, который я поддерживаю:
str = c("F14 : M114L","W15 : M116L, W15 : M118L","W15 : D111L, F14 : E112L, F14 : M116L")
library(qdapRegex)
rm_between(str, "\\s:", "L")
## [1] "F14" "W15, W15" "W15, F14, F14"
qdapRegex стремится быть полезным, как он учит. Если вас интересует регулярное выражение, используемое...
S("@rm_between", "\\s:", "L")
## [1] "(\\s:)(.*?)(L)"
gsub(S("@rm_between", "\\s:", "L") , "", str)
Пара подходов.
Возьмите первые несколько букв, если они всегда три:
substr(str,1,3)
Мне лично нравится stringr
тоже. Это делает добычу очень простой. Выбирайте то, что хотите, а не то, что вы не хотите.
library(stringr)
str_extract(str,"[A-Z][0-9]*")
Я упростил их для вектора, но у вас есть вспомогательные элементы, вам понадобится что-то вроде:
splits <- strsplit(str,", ")
result <- lapply(splits, substr, start = 1, stop = 3 )
или
result <- lapply(splits, str_extract, pattern = "[A-Z][0-9]*")