例如,是否有一种方法可以从A1:A1000的一系列单元格中进行REGEXMATCH?

时间:2019-06-13 09:22:40

标签: regex excel google-sheets google-sheets-formula array-formulas

基本上,我正在尝试寻找一种方法来搜索短语列表,并突出显示/提取或识别包含来自单独列/列表的短语或单词的任何短语或单元格。

为了说明这一点,我列出了触发我的Google广告的“搜索字词”列表,该列表包含人们输入到Google搜索引擎中的短语或表达式。

我还有一个“否定关键字”列表,用于将某些单词或词组输入Google时阻止广告展示。例如,如果我的否定关键字列表中有“ nursery”一词,那么如果有人输入“我附近最好的幼儿园”这句话,它应该可以阻止广告展示

然后,我将这两个列表都放在excel电子表格的单独列中,因此一列包含搜索词,另一列包含否定关键字。

我想做的是搜索所有搜索词,如果该单元格中的任何单词或短语与否定关键字列表中的短语匹配,则高亮显示该单元格。在上面的示例中,当短语“ nursery”位于否定关键字列表中时,包含短语“我附近最好的托儿所”的单元格将被突出显示或提取。

Google表格中的

REGEXMATCH可以做到这一点,但是,我不知道它可以选择多个表达式,它确实允许多个表达式,但是只能通过说(A1 | A2 | A3)来解决。我有1000多个单元格,因此想一种方法一次选择所有单元格,例如(A1:A1000)

这是指向Google表格的链接,如果可能的话,我希望能够在Excel中进行操作。 https://docs.google.com/spreadsheets/d/1yLTswjrpwf2owhX4YxPavUY441WlQsnzv3StoP-ilmc/edit?usp=sharing

2 个答案:

答案 0 :(得分:1)

=ARRAYFORMULA(IF(REGEXMATCH(A2:A, TEXTJOIN("|", 1, C:C)), A2:A, ))

0


=ARRAYFORMULA(IFERROR(REGEXEXTRACT(A2:A, TEXTJOIN("|", 1, C:C))))

0


=ARRAYFORMULA(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(IFERROR(
 SPLIT(A2:A, " ")), "^"&TEXTJOIN("|^", 1, C:C)), A2:A, )),,999^99))))

0


=ARRAYFORMULA(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(IFERROR(
 SPLIT(A2:A, " ")), "^"&TEXTJOIN("$|^", 1, C:C)&"$"), A2:A, )),,999^99))))

0


=ARRAYFORMULA(IF(IF(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(IFERROR(
 SPLIT(A2:A, " ")), "^"&TEXTJOIN("$|^", 1, C:C)&"$"), A2:A, )),,999^99)))<>"", 
 TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(IFERROR(
 SPLIT(A2:A, " ")), "^"&TEXTJOIN("$|^", 1, C:C)&"$"), A2:A, )),,999^99))),
 TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(A2:A, 
 "^"&TEXTJOIN("$|^", 1, C:C)&"$"), A2:A, )),,999^99))))<>"",
 IF(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(IFERROR(
 SPLIT(A2:A, " ")), "^"&TEXTJOIN("$|^", 1, C:C)&"$"), A2:A, )),,999^99)))<>"", 
 TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(IFERROR(
 SPLIT(A2:A, " ")), "^"&TEXTJOIN("$|^", 1, C:C)&"$"), A2:A, )),,999^99))),
 TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(A2:A, 
 "^"&TEXTJOIN("$|^", 1, C:C)&"$"), A2:A, )),,999^99)))), 
 TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(REGEXMATCH(IF(REGEXMATCH(A2:A, "\s"), A2:A, ), 
 TEXTJOiN("|", 1, C:C)), A2:A, )),,999^99)))))

0

答案 1 :(得分:0)

有一种更简单的方法可以做到这一点。不要使事情过于复杂。

说您要从城市列表中搜索匹配项。

  1. 在一个标签中放置城市列表。
  2. 将它们设为小写字母以便于查找,因为搜索词全部为小写字母。您可以通过添加新列并使用LOWER函数来做到这一点。
  3. 返回包含搜索短语列表的单元格。
  4. 在任何空白单元格中(最上面一行的一侧都是不错的地方)放置以下公式: 城市列表公式:= TEXTJOIN(“ |”,1,'vlookup city'!B $ 2:B $ 477)(如果您的标签页名为“ vlookup city”,而您的城市在该标签页的B列中)

    < / li>
  5. 在搜索词旁边添加新列,或选择一个现有的词条来放置“找到匹配项”信息。

  6. 在该新列中,添加此公式(如果您的数据从第4行开始,并将“城市列表”公式放在单元格G3中:) = REGEXMATCH(A4,G $ 4)

  7. 将公式完全填充到列表中。您可以双击单元格右下角的蓝色小方块,也可以一直拖动并拖动到列表的底部。

Ba!它将在您的搜索短语中的任何位置搜索这些城市名称中的任何一个。

如果搜索词组至少包含一个匹配词,它将返回“ True”。

然后,您可以在公式上添加其他功能,使其返回其他值。例如: = IF(REGEXMATCH(A4,G $ 4),“找到匹配项”,“找不到匹配项”)

这是一种超轻量级的解决方案,不会使您的图纸放慢速度,并且易于使用。

enter image description here

https://docs.google.com/spreadsheets/d/1XAIDB98r2CGu7hL3ISirErDPNlgT6lVt-TCG0qI1uTE/edit?usp=sharing