Google Sheets用Regex、数组公式搭配MATCH实现姓氏全匹配问题
你的思路是合理的,你之前尝试数组化MATCH失败是因为MATCH的第二个参数如果要输出数组结果,需要外层套ARRAYFORMULA,不过也可以换更简洁的写法,无需将中间步骤拆分到单独单元格,直接通过数组公式在单个单元格内完成全部逻辑,以下是两种谷歌表格可用的实现方案:
方案1:LET变量简化版(可读性更高)
=LET( target_last,REGEXEXTRACT(B2,"\w+$"), all_names,TRIM(SPLIT(SUBSTITUTE(A2," and",","),",")), all_last,ARRAYFORMULA(REGEXEXTRACT(all_names,"\w+$")), IF(COUNTIF(all_last,target_last)=COUNTA(all_last),"MATCH","NO MATCH") )
逻辑说明:
- 先提取B列指定的目标姓氏存入
target_last变量 - 拆分清洗A列的所有姓名,存入
all_names变量 - 批量提取所有姓名的姓氏存入
all_last变量 - 对比匹配成功的姓氏数量和总姓名数量,二者相等则说明所有姓氏都匹配,返回对应结果
方案2:BYROW遍历版
=IF(AND( BYROW( ARRAYFORMULA(REGEXEXTRACT(TRIM(SPLIT(SUBSTITUTE(A2," and",","),",")),"\w+$")), LAMBDA(x,x=REGEXEXTRACT(B2,"\w+$")) ) ),"MATCH","NO MATCH")
逻辑说明:
- 直接在数组层完成姓名拆分、姓氏提取操作
- 用
BYROW遍历每个提取出的姓氏和目标姓氏做匹配,返回布尔值数组 - 用
AND判断所有布尔值是否都为真,输出对应结果
两个方案都支持直接下拉适配整行数据,不需要修改中间参数。
内容的提问来源于stack exchange,提问作者Debora S.
相关产品推荐
相关产品推荐

