仅提取 R 中字符串开头和结尾的左括号和结尾括号之间的字符

Extract only the characters that are between opening and ending parantheses in the start and end of a string in 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

不应捕获括号本身。

是否有 way/function 可以在 R 中快速完成此操作?

我试过 stringr::wordstringi::stri_extract,但我得到的结果很奇怪。

我们可以为此使用 stringr 库。例如

library(stringr)
mm <- str_match(mystrings, "^\(([^)]+)\).*\(([^)]+)\)$")
mm

匹配找到捕获组中字符串开头和结尾的括号之间的内容,因此可以轻松提取它们。

它 returns 是一个字符矩阵,您似乎只想要第 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)