仅提取 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::word
和 stringi::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)
我有很多字符串都具有以下格式:
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::word
和 stringi::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)