R语言中是否存在支持正则表达式、返回匹配索引的match等价函数?
R语言中支持正则表达式的match等价实现
我们可以通过结合sapply(或purrr工具)与grepl函数,实现支持正则表达式的"match"功能,返回每个语料元素在正则词典中第一个匹配项的索引(与match的行为一致,优先返回首个匹配结果)。
示例代码
# 定义语料和正则词典 Corpus <- c('animalada', 'fe', 'fernandez', 'ladrillo') Lexicon <- c('anima.+$', '.*ez$', '^fe.*$', 'ladr.*$') # 实现正则匹配并返回索引 regex_match_index <- sapply(Corpus, function(x) { # 找到所有匹配当前语料元素的正则词典索引 match_positions <- which(grepl(Lexicon, x, perl = TRUE)) # 返回第一个匹配的索引,无匹配则返回NA if (length(match_positions) > 0) match_positions[1] else NA }) # 查看结果 regex_match_index #> animalada fe fernandez ladrillo #> 1 3 2 4 # 验证匹配的正则规则 Lexicon[regex_match_index] #> [1] "anima.+$" "^fe.*$" ".*ez$" "ladr.*$"
补充说明
- 如果需要返回所有匹配的索引而非仅第一个,只需去掉代码中的
[1],此时结果会是一个列表,每个元素对应语料项的所有匹配词典索引。 - 若偏好更简洁的语法,可使用
purrr包的map_int函数:library(purrr) regex_match_index <- map_int(Corpus, ~ { matches <- which(grepl(Lexicon, .x)) length(matches) > 0L ? matches[1L] : NA_integer_ })
内容的提问来源于stack exchange,提问作者vintdeux
相关产品推荐
相关产品推荐

