取字符串中两相邻分隔符之间文本的公式

楼主
我是社区第303位番薯,欢迎点我头像关注我哦~
刚才遇到一个童鞋问如何截取特定分隔符之间的字符串问题,一开始想到的是用substr或者split函数来做,但是后面一想,substr只能解决取从第几个字符开始的n个字符,而split是返回的用分隔符分割的字符串,没有选择性的截取,后来找了一下,发现原来有这种算法,例子中说的是在excel中的方法,fr兼容excel所以这一点不用担心,往下看吧。
有时需要从包含分隔符号的字符串中提取子字符串,例如Excel工作表的某列中包含类似“200-GH11301-11TB5”的文本字符串,该字符串被两个相同的分隔符号“-”分成三部分,且每部分的字符数不固定,现在需要提取其中的第2部分内容“GH11301"。这时可以使用下面的公式,假如原字符串位于A1单元格中,在B1单元格中输入公式:

    =MID(LEFT(A1,FIND("`",SUBSTITUTE(A1,"-","`",2))-1),FIND("`",SUBSTITUTE(A1,"-","`",1))+1,LEN(A1))

    公式说明:本例用SUBSTITUTE函数将两个分隔符号“-”替换为“`”,“`”符号位于数字“1”键的左侧,也可改为字符串中没有出现的其他特殊符号。然后用FIND函数查找第二个“`”出现的位置并用LEFT函数去掉第二个“`”后面的部分,最后用MID函数提取所需内容。由于MID函数的第三个参数“LEN(A1)”大于所提取文本的字符数,因而本公式适用于各部分长度不固定的字符串。

    也可使用下面的公式:
   
    =TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",LEN(A1))),LEN(A1),LEN(A1)))
   
    公式说明:REPT(" ",LEN(A1))产生一个与原字符串长度相同的空格字符串,用SUBSTITUTE函数将其替换各分隔符号,这样所需提取文本的前后就都包含了与原字符串长度相同的空格字符串,再用MID函数进行截取,截取后的字符串前后都包含一些空格,最后用TRIM函数去掉这些空格即得到所需文本。本例原字符串中有2个分隔符号,第一部分有3个字符,第二部分有7个字符,第三部分有5个字符,字符串总长度LEN(A1)=17,MID函数截取后“GH11301”的前面就有4(3+17-17+1)个空格,后面就有6(17-4-7)个空格。
   
    如果字符串中包含更多的分隔符号,如“1130-80-F030305-5TB1-T(40)”,要提取各部分内容,可以将公式改为:
   
    提取第一部分:
   
    =TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",LEN(A1))),1,LEN(A1)))
   
    或者直接用公式:
   
    =LEFT(A1,FIND("-",A1)-1)
   
    提取其他部分,如第3部分“F030305”:
   
    =TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",LEN(A1))),2*LEN(A1),LEN(A1)))
   
    本例中提取字符串中的第3部分,公式中用红色标识的数字为“2”,如果是第N部分,则为N-1。


分享扩散:

沙发
发表于 2012-3-5 18:04:11
自己顶一下。。。
板凳
发表于 2012-3-5 18:45:12
怎么这么长
地板
发表于 2012-3-5 20:32:27
帮顶一下 嘿嘿
5楼
发表于 2012-3-6 08:29:11
这个好,经常用到,mark之
6楼
发表于 2012-3-6 13:09:07
:(
7楼
发表于 2012-3-6 13:16:08
东西不错,mark。。。。。。。。
8楼
发表于 2012-3-6 13:43:22
{:soso__16984349925490629196_1:}
9楼
发表于 2012-4-2 09:38:03
怎么多代码,看不下去了
10楼
发表于 2016-6-15 11:05:03
顶一下,帆软在截取字符串上是有些不足,因为在Java里,类似于substring这样的方法是String类型自带方法,估计他们在开发的时候也无法做到封装。我也是刚遇到这样的问题,也是各种拿公式往上凑,真遇到这种情况实际情况实际分析,关键还是想象力
11楼
发表于 2021-6-30 14:04:09
Mark下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

16回帖数 1关注人数 13643浏览人数
最后回复于:2021-6-30 14:04

返回顶部 返回列表