2017-07-26 53 views
0

我有一個正則表達式能夠匹配我的數據,使用grepl,但我無法弄清楚如何將其中的子表達式提取到新列。使用正則表達式從字符串的數據框中提取子表達式

這是迴歸測試字符串作爲foo,沒有任何的子表達式:

entryPattern <- "(\\d+)\\s+([[:lower:][:blank:]-]*[A-Z][[:alpha:][:blank:]-]+[A-Z]\\s[[:alpha:][:blank:]]+)\\s+([A-Z]{3})\\s+(\\d{4})\\s+(\\d\\d\\-\\d\\d)\\s+([[:print:][:blank:]]+)\\s+(\\d*\\:?\\d+\\.\\d+)" 
test <- "101  POULET Laure        FRA  1992 25-29  E. M. S. Bron Natation   26.00" 
m <- regexpr(entryPattern, test) 
foo <- regmatches(test, m) 

在我的實際使用情況,我作用於大量的字符串類似test我。我能找到格式正確的格式,所以我認爲模式是正確的。

rows$isMatch <- grepl(entryPattern, rows$text) 

什麼「M希望做的就是添加子表達式中的行數據幀新的列(即rows$rankrows$namerows$country,等等)。 在此先感謝您的任何建議。

回答

0

看來regmatches不會做我想要的。相反,我需要stringr軟件包,作爲@ kent-johnson的suggested

library(stringr) 
test <- "101  POULET Laure        FRA  1992 25-29  E. M. S. Bron Natation   26.00" 
entryPattern <- "(\\d+)\\s+([[:lower:][:blank:]-]*[A-Z][[:alpha:][:blank:]-]+[A-Z]\\s[[:alpha:][:blank:]]+?)\\s+([A-Z]{3})\\s+(\\d{4})\\s+(\\d\\d\\-\\d\\d)\\s+([[:print:][:blank:]]+?)\\s+(\\d*\\:?\\d+\\.\\d+)" 
str_match(test, entryPattern)[1,2:8] 

,輸出:

[1] "101"        
[2] "POULET Laure"     
[3] "FRA"        
[4] "1992"       
[5] "25-29"       
[6] "E. M. S. Bron Natation" 
[7] "26.00" 
相關問題