当前位置:首页 > 技术分析 > 正文内容

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

粉丝求助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”。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4580.html

标签: 正则 ?=
分享给朋友:

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

费用管理解决企业财务难题

目前来讲,国内大多数企业费用预算管理都是由财务部门“一手包办”,与之相适应的是费用管理的信息化手段是通过财务管理软件来实现,仅仅局限于财务预算管理层面,从而使预算管理处于“预而不算”的状态,表现为信息滞后、执行者在执行预算过程中处于被动地位、可控性差、考核难以奏效。而且由于对各部门预算缺乏约束力,员...

快速上手React

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能。对于刚开始学习使用框架的小伙伴们,可以推荐这个框架,学会之后简直能颠覆之前你对前端开发的认...

79.idea中git合并分支操作分享

文章目录前言1.fetch的操作2.合并最新代码到当前的开发分支3.解决冲突4.分支合并:5.完成代码合并总结前言git的操作在日产的工作中也非常重要,团队化的代码管理,每次如果代码被别人覆盖或者自己的代码不能提交到服务器那是灾难性的结果,本篇进行一篇分享来总结下idea中git的操作帮助java开...

GitLab-合并请求

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到您的GitLab帐户,然后转到“ 项目”部分下的项目 -步骤3-单击“ 合并请求”选项卡,然后单击“...

一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问

问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存。看了下其它服务,同样的堆内存配置,它们内存占用约70%~79%,此服务比其它服务内存占用稍大。那为什么此服务内存占用稍大...

BuildKit 镜像构建工具

#暑期创作大赛#快速开始 对于 Kubernetes 部署,请参阅examples/kubernetes。BuildKit 由buildkitd守护进程和buildctl客户端组成。虽然buildctl客户端可用于 Linux、macOS 和 Windows,但buildkitd守护程序目前仅适用于...