我想使用單個正則表達式從字符串中提取幾條數據。我做了一個模式,其中包括這些作爲子表達式在括號中的作品。在類似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之後... –