更新我的问题,我有一个存储字符串的对象search_string。
> search_string
[1]" Bud Light - 母亲EUR"
我有另一个列表对象,用于存储品牌名称和区域名称。现在使用search_string,我在filter_values中搜索它并返回年份和品牌名称。我使用下面的命令来实现它。
> lapply(filter_values, function(x) {
+ x[sapply(paste0('\\b',x,'\\b'), grepl,input$param$query, ignore.case=T)]
+
+ })
$Brand
[1] "Bud Light" "Bud Light - Mother"
$Zone
[1] "EUR"
现在,我面临的问题是,如果您在输出中注意到,请搜索 Bud Light - 母亲
在列表中还返回 Bud Light ,这不是必需的。
我如何限制它仅返回输入/询问的内容,而不是最近的匹配,也就像现在返回的那样。
答案 0 :(得分:3)
一个想法是从年份剥离search_string
并匹配品牌,反之亦然,即
Map(function(x, y) grep(x, y, value = TRUE),
c(trimws(gsub('[0-9]{4}', '', search_string)), gsub('\\D+', '', search_string)),
filter_values)
#$`Bud Light - Mother`
#[1] "Bud Light - Mother"
#$`2014`
#[1] "2014"
根据@ Cath的评论使用strsplit
可以获得相同的结果,
Map(function(x, y) grep(x, y, value = TRUE),
strsplit(search_string, "\\s(?=\\d{4})", perl=TRUE)[[1]],
filter_values)