Return true/false 在 [另一个单元格中的字符串] 中找到 [单元格中的字符串]?
Return true/false on [strings in a cell] being found in [strings in another cell]?
单元格 A1 包含多个字符串,例如 "CAT DOG RAT GNU";
单元格 B1 包含多个字符串,例如 "RAT CAT";
我如何运行 进行测试(使用 C1 中的公式)以查找单元格 A1 中是否存在 B1 中的所有字符串?
- 返回true/false就好了
- 字符串不一定按相同顺序排列,如上例
- 项目数量可以变化
- 多个实例不是问题,只要它们在那里
- 但 returns 仅当单元格 B1 中的所有项目都存在于单元格 A1 中时才为真。
到目前为止,我已经尝试过使用 vlookup 和匹配、计数等进行转置拆分数组,但对我来说没有任何效果。 (也许正则表达式不会这样做,因为不能为每个字符串循环?)
你可以试试:
=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(B1, " "),
SUBSTITUTE(A1, " ", "|"))))))=1, TRUE))
为了更精确,您可以这样做:
=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(B1, " "),
"^"&SUBSTITUTE(A1, " ", "$|^")&"$")))))=1, TRUE))
然后为了不区分大小写:
=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(LOWER(B1), " "),
"^"&SUBSTITUTE(LOWER(A1), " ", "$|^")&"$")))))=1, TRUE))
真正的 ArrayFormula 将是:
=ARRAYFORMULA(IF((A1:A<>"")*(B1:B<>""), IF(REGEXMATCH(TRANSPOSE(QUERY(TRANSPOSE(IFERROR(
REGEXMATCH(IF(SPLIT(B1:B, " ")<>"", SPLIT(LOWER(B1:B), " "), 0),
"^"&SUBSTITUTE(LOWER(A1:A), " ", "$|^")&"$"))),,999^99)), "FALSE"), FALSE, TRUE), ))
单元格 A1 包含多个字符串,例如 "CAT DOG RAT GNU";
单元格 B1 包含多个字符串,例如 "RAT CAT";
我如何运行 进行测试(使用 C1 中的公式)以查找单元格 A1 中是否存在 B1 中的所有字符串?
- 返回true/false就好了
- 字符串不一定按相同顺序排列,如上例
- 项目数量可以变化
- 多个实例不是问题,只要它们在那里
- 但 returns 仅当单元格 B1 中的所有项目都存在于单元格 A1 中时才为真。
到目前为止,我已经尝试过使用 vlookup 和匹配、计数等进行转置拆分数组,但对我来说没有任何效果。 (也许正则表达式不会这样做,因为不能为每个字符串循环?)
你可以试试:
=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(B1, " "),
SUBSTITUTE(A1, " ", "|"))))))=1, TRUE))
为了更精确,您可以这样做:
=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(B1, " "),
"^"&SUBSTITUTE(A1, " ", "$|^")&"$")))))=1, TRUE))
然后为了不区分大小写:
=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(LOWER(B1), " "),
"^"&SUBSTITUTE(LOWER(A1), " ", "$|^")&"$")))))=1, TRUE))
真正的 ArrayFormula 将是:
=ARRAYFORMULA(IF((A1:A<>"")*(B1:B<>""), IF(REGEXMATCH(TRANSPOSE(QUERY(TRANSPOSE(IFERROR(
REGEXMATCH(IF(SPLIT(B1:B, " ")<>"", SPLIT(LOWER(B1:B), " "), 0),
"^"&SUBSTITUTE(LOWER(A1:A), " ", "$|^")&"$"))),,999^99)), "FALSE"), FALSE, TRUE), ))