regex - 在[另一个单元格中的字符串]中找到[单元格中的字符串]时返回真/假?
问题描述
单元格 A1 包含多个字符串,例如“CAT DOG RAT GNU”;
单元格 B1 包含多个字符串,例如“RAT CAT”;
如何运行测试(使用 C1 中的公式)以查找 B1 中的所有字符串是否都存在于单元格 A1 中?
- 返回真/假会很好
- 字符串不一定按相同的顺序,如上例
- 项目的数量可能会有所不同
- 多个实例不是问题,只要它们在那里
- 但仅当单元格 B1 中的所有项目都存在于单元格 A1 中时才返回 true。
到目前为止,我已经尝试使用 vlookups 和匹配、计数等转置拆分数组,但对我没有任何帮助。(也许正则表达式不会这样做,因为不能为每个字符串循环?)
解决方案
你可以试试:
=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), ))
推荐阅读
- amazon-dynamodb - DynamoDB 有关设置的基本问题
- excel - 使用宏重新排列多个数据透视表列
- c - C语言格式输出printf函数一个输出问题
- rust - 如果迭代器有生命周期,如何在可变迭代器上实现下一个方法?
- javascript - 创建地图
> 在 JavaScript 中 - php - 在 PHP 中组合两个多维数组以匹配键值
- html - 如何验证以 7 或 8 或 9 开头且 html 语言的最大长度为 10 的手机号码?什么是属性类型?
- selenium-webdriver - 错误停止侦听端口 62157 - Selenium geckodriver
- mongoose - 如何使用两个模式在猫鼬中创建两个集合
- svelte - foreach 表中每一行的文本输入