答案1
我使用免费的正则表达式加入它在 Excel 中添加了正则表达式功能,通过它您可以获得带有正则表达式的函数:
=RegExReplace(RegExReplace(A1,"(\D)+",","),",?(.*[^,]),?","$1")
- 内部函数将非数字转换为
,
- 外部函数删除意外的前导和尾随
,
s
答案2
下面将使用公式来实现:
=SUBSTITUTE(SUBSTITUTE(TRIM(TEXTJOIN("",FALSE,IF((CODE(MID(A1,SEQUENCE(1,LEN(A1)),1))>43)*(CODE(MID(A1,SEQUENCE(1,LEN(A1)),1))<58),MID(A1,SEQUENCE(1,LEN(A1)),1)," ")))," ",","),".,",". ")
现在我们已经有了更简单的方法TEXTJOIN()
,SEQUENCE()
但使用旧的备用方法可以轻松实现两者的用途。
使用AND()
将两个测试放在一起似乎会破坏所需的内部数组,因此我改用了旧式{array of TRUE,FALSE,TRUE,etc.} * {array of TRUE,FALSE,TRUE,etc.}
方法。检查一个条件,然后使用嵌套在另一个条件检查中的结果也是一种方法,但这种方法更简单。
请注意,传统上,人们会添加一个*1
,使数组包含 1 和 0,而不是 TRUE/FALSE,但结果被一个使用,IF()
因此无需转换。(并且……呃……出于第二个原因,进行计算实际上会转换它们,而不需要*1
。)
在末尾加上SUBSTITUTE()
's 有点蛮力。不能用 省略空格,TEXTJOIN()
因为那样会在用逗号分隔多位数字值之前失去对它们的清晰分隔。
按照设置,它将保留","
、"-"
和"."
字符以及数字,但如果不需要","
或,则将第一个值的测试更改为>44 或>45。"-"
CODE()