Извлекать только те символы, которые находятся между начальным и конечным параграфами в начале и конце строки в 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)
Другие вопросы по тегам