我想使用单个正则表达式从字符串中提取几条数据。我做了一个模式,其中包括这些作为子表达式在括号中的作品。在类似perl的环境中,我只是简单地通过代码myvar1=$1; myvar2=$2;
等将这些子表达式传递给变量 - 但是如何在R中执行此操作? 目前,我发现访问这些事件的唯一方法是通过regexec。这不是很方便,因为regexec不支持perl语法和其他原因。这就是我现在要做的:R:从正则表达式中提取子表达式出现
getoccurence <- function(text,rex,n) { # rex is the result of regexec function
occstart <- rex[[1]][n+1]
occstop <- occstart+attr(rex[[1]],'match.length')[n+1]-1
occtext <- substr(text,occstart[i],occstop)
return(occtext)
}
mytext <- "junk text, 12.3456, -01.234, valuable text before comma, all the rest"
mypattern <- "([0-9]+\\.[0-9]+), (-?[0-9]+\\.[0-9]+), (.*),"
rez <- regexec(mypattern, mytext)
var1 <- getoccurence(mytext, rez, 1)
var2 <- getoccurence(mytext, rez, 2)
var3 <- getoccurence(mytext, rez, 3)
显然,它是相当笨拙的解决方案,应该有更好的东西。我会很感激任何意见。
哎哟,的确!我当然读了regmatches的描述,但不知何故忽略了这一点:(非常感谢你!!! –
P.S.现在我明白了为什么:我试图只在regexpr之后使用regmatches,而不是在regexec之后... –