Извлекать только те символы, которые находятся между начальным и конечным параграфами в начале и конце строки в R
У меня есть много строк, которые имеют следующий формат:
mystrings <- c(
"(ABFUHIASH)THISISAVERYLONGSTRINGWITHOUTANYSPACES(ENDING)",
"(SECONDSTR)YETANOTHERBORINGSTRINGWITHOUTSPACES(RANDOMENDING)",
"(JOWERIC)THISPARTSHOULDNOTBEEXTRACTED(GETTHIS)",
"(CAPTURETHIS)IOJSDOIOIADSNCXZZCX(IJFAI)"
)
Мне нужно захватить строки, которые находятся в круглых скобках как в начале, так и в конце оригинала mystrings
,
Следовательно, переменная start
будет хранить начальные символы для каждой из вышеуказанных строк с одинаковым индексом. Результат будет таким:
start[1]
ABFUHIASH
start[2]
SECONDSTR
start[3]
JOWERIC
start[4]
CAPTURETHIS
И аналогично, окончание для каждой строки в mystrings
будут сохранены в end
:
end[1]
ENDING
end[2]
RANDOMENDING
end[3]
GETTHIS
end[4]
IJFAI
Скобки сами по себе НЕ должны быть зафиксированы.
Есть ли способ / функция, чтобы сделать это быстро в R?
я пытался stringr::word
а также stringi::stri_extract
, но я получаю очень странные результаты.
2 ответа
Мы можем использовать stringr
библиотека для этого. Например
library(stringr)
mm <- str_match(mystrings, "^\\(([^)]+)\\).*\\(([^)]+)\\)$")
mm
Совпадение находит содержимое между круглыми скобками в начале и конце строки в группах захвата, чтобы их можно было легко извлечь.
Он возвращает матрицу символов, и вы, кажется, просто хотите 2-й и 3-й столбец. mm[,2:3]
[,1] [,2]
[1,] "ABFUHIASH" "ENDING"
[2,] "SECONDSTR" "RANDOMENDING"
[3,] "JOWERIC" "GETTHIS"
[4,] "CAPTURETHIS" "IJFAI"
Нечто подобное может работать для вас:
> regmatches(mystrings,gregexpr("\\(.+?\\)",mystrings))
[[1]]
[1] "(ABFUHIASH)" "(ENDING)"
[[2]]
[1] "(SECONDSTR)" "(RANDOMENDING)"
[[3]]
[1] "(JOWERIC)" "(GETTHIS)"
[[4]]
[1] "(CAPTURETHIS)" "(IJFAI)"
Например, для извлечения концовок вы можете:
lapply(x,tail,1)