拆分函数奇怪地处理破折号
Split function treating dashes oddly
为什么 =SPLIT("1,2-5,4", ",")
等于
1
42040
4
而不是
1
2-5
4
?
我已将所有单元格设置为纯文本格式。
Regextract 应该会为您提供所需的输出。尝试:
=ArrayFormula(regexextract("1,2-5,4", {"^(\d+),",",(.+),",",(\d+)$"}))
补充 JPV 的回答。
您可以使用:
=REGEXEXTRACT(A1,"(.*?),(.*?),(.*)")
这 "hard-coded" 正好拆分 3 个元素(如 JPV 那样)。为了提供更大的灵活性,您可以使用类似的东西:
=REGEXEXTRACT(A1&REPT(",",10),REPT("(.*?),",10))
限制为最多 10 个元素(可以更改该数字以适应)。但是,它将输出一个数组,该数组的长度始终为最大元素数(用空白单元格填充)。您可以使用 QUERY 或 FILTER 来过滤掉那些空白单元格 - 公式会变得有点复杂。
或者,您可以 "code" 您的字符串以避免自动日期强制转换,然后 "uncode" 它在 SPLIT 之后:
=ArrayFormula(SUBSTITUTE(SPLIT(SUBSTITUTE(A1,"-","x"),","),"x","-"))
在单元格中使用 1,2-5,4
时,可以根据需要使用数据 > 将文本拆分为列...拆分。
为什么 =SPLIT("1,2-5,4", ",")
等于
1
42040
4
而不是
1
2-5
4
?
我已将所有单元格设置为纯文本格式。
Regextract 应该会为您提供所需的输出。尝试:
=ArrayFormula(regexextract("1,2-5,4", {"^(\d+),",",(.+),",",(\d+)$"}))
补充 JPV 的回答。
您可以使用:
=REGEXEXTRACT(A1,"(.*?),(.*?),(.*)")
这 "hard-coded" 正好拆分 3 个元素(如 JPV 那样)。为了提供更大的灵活性,您可以使用类似的东西:
=REGEXEXTRACT(A1&REPT(",",10),REPT("(.*?),",10))
限制为最多 10 个元素(可以更改该数字以适应)。但是,它将输出一个数组,该数组的长度始终为最大元素数(用空白单元格填充)。您可以使用 QUERY 或 FILTER 来过滤掉那些空白单元格 - 公式会变得有点复杂。
或者,您可以 "code" 您的字符串以避免自动日期强制转换,然后 "uncode" 它在 SPLIT 之后:
=ArrayFormula(SUBSTITUTE(SPLIT(SUBSTITUTE(A1,"-","x"),","),"x","-"))
在单元格中使用 1,2-5,4
时,可以根据需要使用数据 > 将文本拆分为列...拆分。