Я использую это для извлечения этих частей: (Это вариация на parse.one
функции от RegExpr?)
getMatchingPatterns <- function(data, pattern) {
result <- gregexpr(pattern, data, perl = TRUE)
do.call(rbind,lapply(seq_along(data), function(i) {
if(any(result[[i]] == -1)) return("")
st <- data.frame(attr(result[[i]], "capture.start"))
le <- data.frame(attr(result[[i]], "capture.length") - 1)
mapply(function(start,leng) substring(data[i], start, start + leng), st, le)
}))
}
Затем мы определяем Perl в котором мы называем каждую переменную, в данном случае (И это большое предположение, основанное на одном примере),
pattern <- "\\((?<ABCPart>.*?)-(?<BPart>.*?)\\)"
так что первая часть я назвать ABCPart
, а второй Bpart
затем вызвать функцию выше с этой схемой:
> getMatchingPatterns(str,pattern)
ABCPart BPart
[1,] "AbcDfE" "BB"
Она возвращает его в виде матрицы, которая является легко конвертируется в data.frame, data.table и т. д. ...
Вышеупомянутая функция найдет ВСЕ соответствия для данного рисунка, поэтому будьте осторожны, как общий шаблон.
Итак ... что вы пробовали до сих пор? – nrussell
Является ли '(AbcDfE-BB)' частью всегда в конце ввода? –
'read.table (text = gsub ('\\ ((. *) \\) |.', '\\ 1', str), sep = '-')' – rawr