如何匹配字符串中的多个模式?

how to match multiple patterns in string?

如何匹配多个模式并获取与该模式对应的值。

我有一个这样的 table :

library(data.table)
set.seed(1)
table_1 <- data.table(names = c('bluecdsd','red321','yellowVsds523','423_black','ewrwblack'),
                      value = runif(5))

模式 table 是这样的:

table_2 <- data.table(category = c('black','blue','red','white'),
                      size = c('small','little','large','huge'))

我想要的结果:

           names     value   size
1:      bluecdsd 0.5995658 little
2:        red321 0.4935413  large
3: yellowVsds523 0.1862176     NA
4:     423_black 0.8273733  small
5:     ewrwblack 0.6684667  small

我知道我应该使用正则表达式,但不知道如何匹配多个模式,有什么帮助吗?

grep category of table2 with names of table1 得到table1 names的值赋值给table2。一旦我们在两个表中都有 names,我们可以使用基于 on = .(names)join 方法并将表 2 中的 size 绑定到表 1。

  library(data.table)      
  table_2 <- table_2[, .(names = grep( unique(category), table_1[, names], value =  TRUE  ), size = size ),
                     by = category ]
  table_2 <- table_2[!is.na(names), ]

  table_1[table_2, `:=` ( size = i.size), on = c('names')]
  table_1
  #            names     value   size
  # 1:      bluecdsd 0.2655087 little
  # 2:        red321 0.3721239  large
  # 3: yellowVsds523 0.5728534     NA
  # 4:     423_black 0.9082078  small
  # 5:     ewrwblack 0.2016819  small

数据:

set.seed(1)
table_1 <- data.table(names = c('bluecdsd','red321','yellowVsds523','423_black','ewrwblack'),
                        value = runif(5))

table_2 <- data.table(category = c('black','blue','red','white'),
                        size = c('small','little','large','huge'))

我们可以 extract 子字符串并执行 match

library(stringr)
table_1[, size := table_2$size[match(str_extract(names, 
            paste(table_2$category, collapse="|")), table_2$category)]]
table_1
#          names     value   size
#1:      bluecdsd 0.2655087 little
#2:        red321 0.3721239  large
#3: yellowVsds523 0.5728534     NA
#4:     423_black 0.9082078  small
#5:     ewrwblack 0.2016819  small