我有一个能够使用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)
我们希望做的是将子表达式添加为行数据框中的新列(即rows$rank
,rows$name
,rows$country
等)。 提前感谢任何建议。
答案 0 :(得分:0)
似乎regmatches
不会做我想要的。相反,我需要@ 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"