R语言stringr包str_subset提取含颜色句子异常问题求助
问题根源:大小写不匹配导致的漏匹配
你遇到的问题其实很常见——stringr的正则匹配默认是区分大小写的!你定义的colour_match是小写的颜色词,但sentences里很多包含颜色的句子,颜色词是首字母大写的(比如句子开头的Red、Blue),或者有其他大小写形式,这些都没被你的默认匹配规则捕捉到,所以只拿到了57条全小写颜色的句子。
解决方案:忽略大小写进行匹配
有两种简单的方式解决这个问题:
方式1:直接给str_subset添加ignore_case参数
str_subset本身支持ignore_case参数,设置为TRUE就能忽略大小写匹配:
library(tidyverse) library(stringr) colours <- c("red", "orange", "yellow", "green", "blue", "purple") colour_match <- str_c(colours, collapse = "|") # 添加ignore_case=TRUE忽略大小写 has_colour <- str_subset(sentences, colour_match, ignore_case = TRUE)
方式2:用regex()创建忽略大小写的匹配模式
你也可以把匹配模式包装成一个忽略大小写的正则对象,再传入str_subset:
colour_match_regex <- regex(str_c(colours, collapse = "|"), ignore_case = TRUE) has_colour <- str_subset(sentences, colour_match_regex)
验证结果
修改后再查看length(has_colour),就能得到所有包含颜色词的句子了——比如原来被漏掉的"Red sky at night is a sailor's delight."这类句子现在都会被正确提取出来。
内容的提问来源于stack exchange,提问作者stackinator
相关产品推荐
相关产品推荐

