Google Sheets Query:如何提取字符串中首个'-'前的内容?
解决方案
你可以通过两种方式结合这两个公式,核心是用ARRAYFORMULA批量处理QUERY返回的结果,或者用LET函数简化重复调用:
方法1:直接嵌套(快速实现)
把QUERY的结果作为REGEXEXTRACT的数据源,用ARRAYFORMULA批量处理每一行的Col2:
=ARRAYFORMULA(IFERROR( { QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE), REGEXEXTRACT(QUERY(IMPORTRANGE(...),"select Col2 where Col2!=''",FALSE),"^[^-]*") } ))
这个公式会保留原Col2的同时,在右侧新增一列提取后的内容。如果不需要原Col2,只保留提取结果,可以调整为:
=ARRAYFORMULA(IFERROR( { INDEX(QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE),,1), INDEX(QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE),,2), REGEXEXTRACT(INDEX(QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE),,3),"^[^-]*") } ))
方法2:用LET函数优化(提升效率)
重复调用IMPORTRANGE会增加加载时间,用LET把QUERY的结果存为变量,再统一处理:
=LET( raw_data, QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE), ARRAYFORMULA(IFERROR( { INDEX(raw_data,,1), INDEX(raw_data,,2), REGEXEXTRACT(INDEX(raw_data,,3),"^[^-]*") } )) )
raw_data存储QUERY拉取的原始数据,避免重复调用IMPORTRANGEINDEX(raw_data,,3)定位到原始数据中的Col2列,用REGEXEXTRACT批量提取第一个“-”前的内容IFERROR用来处理Col2中没有“-”的情况,此时会返回原字符串;如果想这种情况返回空,可把正则改成^[^-]*?(?=-)
内容的提问来源于stack exchange,提问作者Jeremiah
相关产品推荐
相关产品推荐

