百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文
饭都被正则抢了:“\”数量不等,以最后一个“\”分隔符分列

饭都被正则抢了:“\”数量不等,以最后一个“\”分隔符分列

  • 网站名称:饭都被正则抢了:“\”数量不等,以最后一个“\”分隔符分列
  • 网站分类:技术文章
  • 收录时间:2025-06-12 10:33
  • 网站地址:

进入网站

“饭都被正则抢了:“\”数量不等,以最后一个“\”分隔符分列” 网站介绍

粉丝求助SOS:如何以最后一个“\”作为分列依据,进行拆分列。


如下图所示

A列数据的特点是:每个单元格中的数字用分隔符“\”分成了若干部分。因为每个单元格分隔符“\”的数量不等,导致分段的数量也不一致。我们想要用每个单元格中的最后一个“\”,作为分列依据,进行拆分列,最终的效果就是B列与C列的结果。




在没有出现REGEXP正则表达式函数之前,我们要用一系列的函数组合成嵌套公式,进行解决。当有了REGEXP之后,可能只用几个正则符号,就可以像编程一样,瞬间解决问题。下面我们就分两种方法:公式嵌套法与正则表达式法,看看好饭都是怎么被正则抢走的。



公式嵌套法


我们由内层向外层逐步解析公式,确定分列1



首先输入SUBSTITUTE函数:

=SUBSTITUTE(A2,"\","")


用SUBSTITUTE替换函数,将A2单元格中的所有"\",替换为空值,也就是说将A2单元格中的所有"\"删除了,留下了其他的字符。



向外嵌套一层LEN函数:

=LEN(SUBSTITUTE(A2,"\",""))


用LEN长度统计函数,将上一步SUBSTITUTE返回结果的字符的长度统计出来。


即去掉“\”后的字符长度。



继续完善公式为:

=LEN(A2)-LEN(SUBSTITUTE(A2,"\",""))


LEN(A2)可计算A2单元格字符总长度。


用A2单元格字符总长度减去[A2单元格去掉“\”后的总长度]=“\”的长度


即得到每个单元格中“\”的总个数。



继续向外嵌套TEXTBEFORE函数:

=TEXTBEFORE(A2,"\",LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))


TEXTBEFORE函数可以提取指定的字符之前的所有内容,并且还可以设置这个字符位于第几个位置。


我们以A2单元格数据为例

用TEXTBEFORE函数提取第2个“\”(即上一步的返回结果)之前的所有内容,返回“1\6”。



继续完善上述公式:

=TEXTBEFORE(A2,"\",LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))&"\"


按要求需要在上一步的返回结果的基础上对“1\6”加上一个“\”,变成“1\6\”




确定分列2


用TEXTAFTER函数:

=TEXTAFTER(A2,"\",LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))


TEXTAFTER函数可以提取指定的字符之后的所有内容,并且还可以设置这个字符位于第几个位置。


我们以A2单元格数据为例

用TEXTBEFORE函数提取第2个“\”之后的所有内容,返回“5”。




有了REGEXP正则表达式函数之后,只需要设置几个简单的正则符号,就解决啦!


正则表达式法


首先输入公式:

=REGEXP(A2,".*\\")


.:表示任意的单个字符

.*:表示连续的任意字符

\\:表示用转义符“\”将"\"转化为真正的普通符号。


.*\\:整体可以表示任意的“数字\”这种格式模式。


REGEXP默认贪婪模式,就可以将A2单元格内的“1\6\”提取出来。



继续完善正则表达式:

=REGEXP(A2,".*\\|\d+$")


|:代表逻辑“或”的意思。

\d+$:代表以任意连续的数字结尾


这样就可以将A2单元格中以数字结尾的那个数字也同时提取出来,返回“5”。