在表格中使用匹配正则表达式和数组公式
Using Match with Regex and Array formula in Sheets
我有一个姓名列表,我想知道其中的姓氏是否存在交叉匹配。
因此,如果 Family 列中的 all 包含姓氏(如 B 栏中的姓氏)- 就会有匹配项,否则不会。
我从 cleaning/splitting 名字开始
=TRANSPOSE(ARRAYFORMULA(TRIM( SPLIT(SUBSTITUTE($A2," and",","),","))))
然后 T/F 每个案例只匹配姓氏
=ISNUMBER(MATCH(REGEXEXTRACT($B,"\w+$"),REGEXEXTRACT(D2,"\w+$"),0))
我想将此 MATCH 作为数组来执行,但它不起作用。然后我必须计算 TRUE 值,如果所有都是 TRUE return 匹配,否则不匹配。
我显然想在单个单元格中执行此操作,但由于无法将 MATCH 设为数组而卡住了。我希望这是有道理的,或者我是以错误的方式进行的。
这是 sample sheet
使用这个
C2=trim(index(split(B2," "),1,COUNTA(split(B2," "))))
D2=SUBSTITUTE(A2,"and",",")
E2=if(COUNTA(split(D2,C2,false))=counta(split(D2,",",false)),"matched","not matched")
1- C2 从句子中获取最后一个单词作为姓氏
2- D2 将“和”替换为“,”
3- E2用“,”拆分D2,用C2拆分D2,然后统计比较是否相同表示全部匹配
结果
尝试:
=ARRAYFORMULA(IF(A2:A="",,IF(1+LEN(
REGEXREPLACE(SUBSTITUTE(A2:A, "and", ","), "[^,]", ))=
MMULT(N(IFERROR(IF(SPLIT(SUBSTITUTE(A2:A, "and", ","), ",")="",,
REGEXMATCH(TRIM(SPLIT(SUBSTITUTE(A2:A, "and", ","), ",")),
REGEXEXTRACT(B2:B, "\w+$"))))),
SEQUENCE(COLUMNS(SPLIT(SUBSTITUTE(A2:A, "and", ","), ",")), 1, 1, 0)),
"match", "no match")))
另一个给你:
=ARRAYFORMULA(
IFS(
A2:A = "",,
ISNA(MATCH(
ROW(A2:A),
QUERY(
QUERY(
SPLIT(
FLATTEN(
FILTER(
ROW(A2:A) & "♥"
& --NOT(REGEXMATCH(
SPLIT(
REGEXREPLACE(A2:A, ",\s*|\s+and\s+", "♥"),
"♥"
),
"^$|" & REGEXEXTRACT(B2:B, "\s(\w+)$")
)),
A2:A <> ""
)
),
"♥"
),
"SELECT Col1, SUM(Col2)
GROUP BY Col1",
),
"SELECT Col1
WHERE Col2 = 0",
),
)),
"NO MATCH",
True,
"MATCH"
)
)
我有一个姓名列表,我想知道其中的姓氏是否存在交叉匹配。
=TRANSPOSE(ARRAYFORMULA(TRIM( SPLIT(SUBSTITUTE($A2," and",","),","))))
然后 T/F 每个案例只匹配姓氏
=ISNUMBER(MATCH(REGEXEXTRACT($B,"\w+$"),REGEXEXTRACT(D2,"\w+$"),0))
我想将此 MATCH 作为数组来执行,但它不起作用。然后我必须计算 TRUE 值,如果所有都是 TRUE return 匹配,否则不匹配。 我显然想在单个单元格中执行此操作,但由于无法将 MATCH 设为数组而卡住了。我希望这是有道理的,或者我是以错误的方式进行的。 这是 sample sheet
使用这个
C2=trim(index(split(B2," "),1,COUNTA(split(B2," "))))
D2=SUBSTITUTE(A2,"and",",")
E2=if(COUNTA(split(D2,C2,false))=counta(split(D2,",",false)),"matched","not matched")
1- C2 从句子中获取最后一个单词作为姓氏
2- D2 将“和”替换为“,”
3- E2用“,”拆分D2,用C2拆分D2,然后统计比较是否相同表示全部匹配
结果
尝试:
=ARRAYFORMULA(IF(A2:A="",,IF(1+LEN(
REGEXREPLACE(SUBSTITUTE(A2:A, "and", ","), "[^,]", ))=
MMULT(N(IFERROR(IF(SPLIT(SUBSTITUTE(A2:A, "and", ","), ",")="",,
REGEXMATCH(TRIM(SPLIT(SUBSTITUTE(A2:A, "and", ","), ",")),
REGEXEXTRACT(B2:B, "\w+$"))))),
SEQUENCE(COLUMNS(SPLIT(SUBSTITUTE(A2:A, "and", ","), ",")), 1, 1, 0)),
"match", "no match")))
另一个给你:
=ARRAYFORMULA(
IFS(
A2:A = "",,
ISNA(MATCH(
ROW(A2:A),
QUERY(
QUERY(
SPLIT(
FLATTEN(
FILTER(
ROW(A2:A) & "♥"
& --NOT(REGEXMATCH(
SPLIT(
REGEXREPLACE(A2:A, ",\s*|\s+and\s+", "♥"),
"♥"
),
"^$|" & REGEXEXTRACT(B2:B, "\s(\w+)$")
)),
A2:A <> ""
)
),
"♥"
),
"SELECT Col1, SUM(Col2)
GROUP BY Col1",
),
"SELECT Col1
WHERE Col2 = 0",
),
)),
"NO MATCH",
True,
"MATCH"
)
)