Regex 用正则表达式提取字符串的部分

Regex 用正则表达式提取字符串的部分,regex,r,Regex,R,我有一组字符串,其中包含一个模式,我想提取它。 如下所示: str <- "Regular Expression Language (AbcDfE-BB)" str我想试试这个 您可以使用sub删除不需要的内容,然后使用-删除strsplit: str <- "Regular Expression Language (AbcDfE-BB)" strsplit(sub(".*\\(([^()]+)\\).*", "\\1", str), "-", fixed=TRUE) st

我有一组字符串,其中包含一个模式,我想提取它。 如下所示:

  str <- "Regular Expression Language (AbcDfE-BB)"
str我想试试这个


您可以使用
sub
删除不需要的内容,然后使用
-
删除
strsplit

str <- "Regular Expression Language (AbcDfE-BB)"
strsplit(sub(".*\\(([^()]+)\\).*", "\\1", str), "-", fixed=TRUE)
str也许这样可以:

strsplit(str,"(\\+)|\\-([a-zA-Z]+)")[[1]]

我使用它来提取这些片段:(它是来自?regexpr的
parse.one
函数的变体)

它以矩阵形式返回,可以轻松转换为data.frame、data.table等


上述函数将查找给定模式的所有匹配项,因此请注意您的模式有多普遍

所以。。。到目前为止,您尝试了什么?输入的末尾是否总是有
(AbcDfE BB)
部分?
read.table(text=gsub('\\(.*\\)|.,'\\1',str),sep='-')
strsplit(str,"(\\+)|\\-([a-zA-Z]+)")[[1]]
getMatchingPatterns <- function(data, pattern) {

   result <- gregexpr(pattern, data, perl = TRUE)
   do.call(rbind,lapply(seq_along(data), function(i) {
   if(any(result[[i]] == -1)) return("")
   st <- data.frame(attr(result[[i]], "capture.start"))
   le <- data.frame(attr(result[[i]], "capture.length") - 1)

   mapply(function(start,leng) substring(data[i], start, start + leng), st,  le)

}))
}
> getMatchingPatterns(str,pattern)
      ABCPart  BPart
   [1,] "AbcDfE" "BB"