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"