小小明,「凹凸数据」专栏作者,Pandas数据处理专家,致力于帮助无数数据从业者解决数据处理难题。
凹凸们,大家好
我们都知道Pandas里支持正则替换比较舒服,但是Excel却没有一个可以支持正则的函数!!!
不过我发现借助VBA就可以在Excel实现正则的抽取、搜索和替换,简直如虎添翼有没有~今天我要给大家分享一个我自己用VBA编写的神器,让你的Excel能够直接支持正则。看完全文,如果有收获,别忘了点赞支持一下
先看看效果吧:
正则抽取效果
对于一列数据:
中楼层(共9层)|2007年建|1室1厅|24.78平米|北
地下室|2014年建|1室0厅|39.52平米|东
底层(共2层)5室3厅|326.56平米|东南西北
我们想提取出其中的 层、楼层数、建筑年份、户型、大小和方向,我们可以选中一排的六个单元格,然后输入公式:
=re_extract(A1,"([^|(]+)(?:\(共(\d+)层\))?(?:\|(\d{4})年建\|)?(\d室\d厅)\|([\d.]+)平米\|([东南西北]+)")
然后按下Ctrl+shift+Enter(表示数组公式),即可得到如下结果:
中楼层 9 2007 1室1厅 24.78 北
地下室 0 2014 1室0厅 39.52 东
底层 2 0 5室3厅 326.56 东南西北
效果如下:

?:
表示当前括号内部是非捕获组。
再看一个简单的例子,对于一列数据:
小五87
张三丰98
东方不败76
杨过88
我们想将姓名和成绩分开,可以选中一排的二个单元格,然后输入公式:
=re_extract(A1,"(.+?)(\d+)")
然后按下Ctrl+shift+Enter(表示数组公式),即可得到如下结果。
效果:

正则搜索效果
对于一列数据:
联想/LENOVO
狮乐/SHILE
Midea/美的
联想/LENOVO
松下/Panasonic
红叶/RedLeaf
纳米亚
富士施乐/FujiXerox
佳印
佳能/CANON
TCL
我们想提取其中的中文品牌,对于没有中文的才用英文,可以输入公式:
=re_find(A1,"[\u4e00-\u9fa5]+|^\w+$")
最终结果:

当然正则搜索也支持数组公式,再看一个例子,对于下面一列数据:
ENBCUCPFunction=280419,CULTE=1,RATFreq=1,EutranFreqLTE=18
ENBCUCPFunction=279719,CULTE=1,RATFreq=1,EutranFreqLTE=18
ENBCUCPFunction=280196,CULTE=1,RA