字符串从项目列表匹配

时间:2018-02-01 08:53:51

标签: r string match

更新我的问题,我有一个存储字符串的对象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 ,这不是必需的。 我如何限制它仅返回输入/询问的内容,而不是最近的匹配,也就像现在返回的那样。

1 个答案:

答案 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)