Вывод gregexpr
с группами захвата в pattern
и perl=TRUE
имеет атрибуты "capture.start"
и "capture.length"
, которые дают вам индексы на входе, соответствующие вашему шаблону.
ind <- lapply(gregexpr(PATTERN, INPUT, perl=TRUE),
function(r) rbind(attr(r,"capture.start"),
attr(r,"capture.length")-1))
OUPTUT <- t(sapply(1:length(input), function(i)
apply(ind[[i]],2, function(y) substr(input[i],y[1],y[1]+y[2]))))
На ваш вход с
PATTERN <- "^(\\d{8}).*(YearsToPith=\\d+;).*(Radius=[\\d\\.]+;)"
вывод:
[1,] "00010131" "YearsToPith=3;" "Radius=50.128;"
[2,] "" "" ""
[3,] "" "" ""
[4,] "" "" ""
[5,] "" "" ""
[6,] "" "" ""
[7,] "" "" ""
[8,] "" "" ""
[9,] "00010132" "YearsToPith=3;" "Radius=104.927;"
[10,] "" "" ""
[11,] "" "" ""
[12,] "" "" ""
[13,] "" "" ""
[14,] "" "" ""
[15,] "" "" ""