分享

Excel进阶文本处理:中英文拆分

 L罗乐 2017-08-15

        前面的文章《Excel数组公式:空格替代法拆分单词》讲解了如何简单拆分有相同符号分割的文本。

        今天我们提高难度来处理中英文混编的文本:

        我们要处理成这样的结果:

        Q:空格分列或者空格替代法不行么?

        答案是不灵,因为英文单词之间也有空格,空格的数目不确定,位置不固定,所以分列和替代法都不能处理这样的文本。


这些数据还是有规律可循:


        一、都可以分割成五部分,之间是以空格来分割的,当然英文名称和英文全称里面会有多余的空格。

        二、缩写是统一的2个大写英文字符


我们先从简单的着手,提取“中文名称”:

至少有三种以上的方法可以提取出最左侧的“中文名称”

一、最简单的方法,查找第一个空格位置(普通公式)

=LEFT($B5,FIND(' ',$B5))

二、二分法(数组公式)

=LEFT($B5,MATCH(1,1/(MID($B5,ROW(INDIRECT('$1:$'&LEN($B5))),1)<'z'),)-1)

三、精确定位法(数组公式)

=LEFT(B$5,MIN(IF(CODE(MID(B$5,ROW(INDIRECT('1:'&LEN(B$5))),1))<=CODE('啊'),ROW(INDIRECT('1:'&LEN(B$5))),9^9))-1)

我们重点研究第三种方法

Q:为什么有简单的方法不用,偏用最复杂的?

简单的方法只能提取“中文名称”,复杂的方法经过演化就可以提取全部内容。

公式3用语言来描述:

1、将整个字符串按照字符串长度打散

2、逐个判断字符的编码是否小于等于最小汉字(“啊”)编码

3、如果为真,则给出这个字符的位置编号,如果为假,则赋值9的9次方

4、求这些位置编号的最小值减一作为截取字符长度

5、按照计算好的长度从左侧截取


我们仔细研究MIN函数里面的内容,就可以演化出SMALL、MAX、LARGE用来定位的函数,关键位置:

一、第一个空格的位置

FIND(' ',$B5)

或者

SEARCH(' ',$B5)

二、第二段中文的起点

SMALL(IF(CODE(MID($B5,ROW(INDIRECT('1:'&LEN($B5))),1))>CODE('z'),ROW(INDIRECT('1:'&LEN($B5))),9^9),SEARCH(' ',$B5) 1)

三、第二段中文的终点

MAX(IF(CODE(MID($A2,ROW(INDIRECT('1:'&LEN($A2))),1))>CODE('z'),ROW(INDIRECT('1:'&LEN($A2))),0))

        有了这三个位置,再加上“简称”是固定的两个字符这一特征,再有就是LEN(B5)字符串长度。

        上面这些值之间的加加减减就能计算出我们想要的结果了:




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多