试图在谷歌电子表格内的arrayformula中拆分

use*_*153 1 regex split formulas google-sheets

我试图在谷歌电子表格中的ARRAYFORMULA函数中使用split函数.

我希望" 1.2.3.4 "成为" 1 "," 2 "," 3 "," 4 "

这是单行代码(仅适用于1行)的代码:

=SPLIT(A2;".")
Run Code Online (Sandbox Code Playgroud)

这是我想要实现的(同时处理多行):

//alone
=SPLIT(A2:A;".")

//or with ARRAYFORMULA
=ARRAYFORMULA(SPLIT(A2:A;"."))
Run Code Online (Sandbox Code Playgroud)

由于SPLIT函数不能在ARRAYFORMULA函数中使用,我搜索了一个变通方法(ARRAYFORMULA()不能与SPLIT()一起使用):

=ARRAYFORMULA(IFERROR(REGEXEXTRACT("."&A2:A;"^"&REPT(".+[^.]+";COLUMN(OFFSET(A2;;;1;4))-1)&".+([^.]+)")))
Run Code Online (Sandbox Code Playgroud)

它几乎正在工作,除了它没有正确分割的事实,这是我得到的结果:

"1.2.3.4"变为"4","4","4","4"

如果我可以让解决方法真正正常工作或更好的替代方案,那将是非常棒的......

Mar*_*rot 5

你的表达式创建如下的正则表达式:

^.+[^.]+.+[^.]+.+[^.]+.+([^.]+)
Run Code Online (Sandbox Code Playgroud)

.+部分将尽可能地匹配任何东西,从而推动他持续([^.]+)到最后.

如果您使用这样的表达式,它应该更好:

^\.[^.]*\.[^.]*\.[^.]*\.([^.]*)
Run Code Online (Sandbox Code Playgroud)

它总是会计算每一个.,并且永远不会把最后一组推得太远.

(你可以使用{3}而不是重复子模式,但这会改变你的原始公式太多)

这是相应的公式:

=ARRAYFORMULA(IFERROR(REGEXEXTRACT("."&A2:A;
    "^"&REPT("\.[^.]*";COLUMN(OFFSET(A2;;;1;4))-1)&"\.([^.]*)")))
Run Code Online (Sandbox Code Playgroud)