如何在R语言中提取字符串中的完整匹配指定词汇
解决stringr提取完整匹配词汇的问题
问题出在正则匹配的顺序上:当你用paste(ind_val, collapse = "|")生成cnn|cnncod40的模式时,正则引擎会按从左到右的顺序尝试匹配,遇到第一个能匹配的子串就停止。所以包含cnncod40的字符串会先匹配到前缀cnn,导致提取不到完整的目标值。
解决思路很简单:把匹配项按字符串长度从长到短排序,让更长的匹配项优先被检查,这样就能优先匹配到完整的长字符串,避免被短前缀截胡。
修改后的代码如下:
library(stringr) strings <- c('strng_tst_1_cnn_rst.txt', 'strng_tst_1_cnncod40_cst.txt','strng_tst_2_cnn_crst.txt', 'strng_tst_2_cnncod40_rrst.txt') ind_val <- c('cnn','cnncod40') # 按字符串长度降序排序,长串优先匹配 ind_val_sorted <- ind_val[order(-nchar(ind_val))] # 生成正则匹配模式 pattern <- paste(ind_val_sorted, collapse = "|") # 提取目标内容 str_extract(strings, pattern)
运行后输出:
[1] "cnn" "cnncod40" "cnn" "cnncod40"
这种方法适用于任意数量的匹配项,哪怕有数百个,排序逻辑会自动处理长字符串优先匹配的需求。
内容的提问来源于stack exchange,提问作者Lily Nature
相关产品推荐
相关产品推荐

