用正则函数快速拆分单元格中的同类数据
作者:ITFANS来源:部落窝教育发布时间:2024-11-27 19:17:01点击:133
编按:
本文介绍古法、新法、正则法拆分单元格中的同类数据,并以正则函数法为主。
今天再说说单元格中同类数据的拆分或提取。
先从简单的开始,拆分同一类数据。
1.拆分姓名到多列
古法:
经典的空格替换提取法,适合所有版本。
=TRIM(MID(SUBSTITUTE(SUBSTITUTE($A2,"、",REPT(" ",99)),",",REPT(" ",99)),COLUMN(A1)*99-98,99))
新法:
较新版本和最新版本都适合。
=TEXTSPLIT(A2,{"、",","})
正则法:
最新版本适合。
WPS表格:
=REGEXP(A2,"[^、,]+")
Excel表格:
=REGEXEXTRACT(A2,"[^、,]+",1)
解释:
正则表达式"[^、,]+",表示不含顿号和逗号的字符串。
WPS正则函数默认提取所有符合条件的值;而Excel正则函数默认提取符合条件的第一个值,只有第3参数设置为1才提取所有符合的值。
2.拆分姓名到单列
古法:
=TRIM(MID(SUBSTITUTE(SUBSTITUTE(CONCAT($A$2:$A$4&"、"),"、",REPT(" ",99)),",",REPT(" ",99)),ROW(A1)*99-98,
99))
提醒:由于单元格最多能容纳的字符数约32000,所以CONCAT法不适合数据量大的组合与拆分。
新法:
=TEXTSPLIT(CONCAT(A7:A9&"、"),,{"、",","})
正则法:
WPS表格:
=TOCOL(REDUCE(,REGEXP(A7:A9,"[^、,]+",3),VSTACK),3)
Excel表格:
=TRANSPOSE(REGEXEXTRACT(CONCAT(A7:A9&"、"),"[^、,]+",1))
解释:
(1)
WPS正则函数匹配模式3,表示完整提取。当第1参数是数组,第2参数每段正则表达式都匹配多个值的时候,使用完整提取模式搭配REDUCE或者MAP等LAMBDA伴侣函数可以提取所有结果。
Excel正则函数没有完整提取模式,所以此处用CONCAT函数将A7:A9合并成一个值。如果不合并,则需要将正则放入LAMBDA中,如“=TRANSPOSE(DROP(REDUCE("",A7:A9,LAMBDA(x,y,HSTACK(x,REGEXEXTRACT(y,"[^、,]+",1)))),,1))”。
(2)
此处WPS使用了REDUCE函数语法糖简写。完整的写法是“=TOCOL(REDUCE(,REGEXP(A7:A9,"[^、,]+",3),LAMBDA(X,Y,
VSTACK(X,IFNA(Y,"")))),3)”。
再来看一个复杂的,拆分多种同类数据。
1.拆分系列、货号等成多列
如下表A列,同一单元格中包括了相同系列的多个子系列数据。现在需要依次将子系列名(包含系列名,如“22G原封机(灰色)”)、货号(如“grey001”)和销量(如“900”)拆分出来。
古法、新法,大家可以自己写写,这里只给出正则法。
WPS表格:
正则第2参数不用数组:
=TOROW(VSTACK(LEFT(A2,3)& REGEXP(A2,".{5}色")&")",REGEXP(A2,"[A-z0-9]+(?=))"),--REGEXP(A2,"(?<=))
[0-9]+")),,1)
正则第2参数用数组:
=TOROW(REDUCE(,REGEXP(SUBSTITUTE(SUBSTITUTE(A2,"原"," "&LEFT(A2,3)&"原"),"色","色)"),{".{8}色)","[A-z0-9]+(?=))","(?<=))[0-9]+"},3),VSTACK),,1)
公式解释:
① ".{5}色"".{8}色)",表示提取5个或8个字符外加“色”或“色)”的字符串。
② "[A-z0-9]+(?=))",“(?=))”表示在右括号前,“[A-z0-9]+”表示由字母、数字组合的字符串,两者合起来就表示提取右括号前的字母和数字,如货号“grey001”。
③ "(?<=))[0-9]+",“(?<=))”表示在右括号后,“[0-9]+”表示数字组成的字符串,两者合起来就是提取右括号后的数字,如销量“900”。
2.拆分系列、货号等成单列
正则第2参数不用数组:
=WRAPROWS(DROP(REDUCE("",A2:A5,LAMBDA(x,y,HSTACK(x,TOROW(VSTACK(LEFT(y,3)& REGEXP(y,".{5}色")&")",
REGEXP(y,"[A-z0-9]+(?=))"),--REGEXP(y,"(?<=))[0-9]+")),,1)))),,1),3)
第2参数用数组:
=SORT(WRAPROWS(TOROW(REDUCE(,REGEXP(SUBSTITUTE(SUBSTITUTE(A2:A5,"原"," "&LEFT(A2:A5,3)&"原"),"色","色)"),{".{8}色)","[A-z0-9]+(?=))","(?<=))[0-9]+"},3),VSTACK),3,1),3))
大家可以自己写写Excel表格正则提取公式。
本文配套的练习课件请添加客服微信buluowojiaoyu索取。
做Excel高手,快速提升工作效率,部落窝教育Excel精品好课任你选择!
扫下方二维码关注公众号,可随时随地学习Excel:
相关推荐:
版权申明:
本文作者ITFANS;部落窝教育享有稿件专有使用权。若需转载请联系部落窝教育。