超级厉害的提取函数——REGEXP正则函数(关于汉字部分)

在日常工作中,我们经常会遇到提取文本或者数字等,今天为大家介绍一个新函数—REGEXP正则函数,它的功能很强大,在提取时不需要嵌套其它函数,非常方便。

如图,我们需要根据要求,提取跟文字相关的信息,主要用到的正则表达式为:

[一-龟] 常用的汉字字符集

[一-龥] 所有汉字字符集

[一-龟]+ 任意汉字组成的一段连续字符集

[一-龟].+ 以汉字开头的所有字符集

[^一-龟] 非中文字符集

+ 表示出现一次或多次

  1. 提取第一个汉字前的内容

如图,我们需要提取第一个汉字前的内筒,在单元格中输入公式:=REGEXP(A2,\”^[^一-龟]+\”),公式中的第一个^,表示从字符串的开头提取;方括号中的^表示排除,[^一-龟]代表非中文字符,[^一-龟]+表示至少1个字符长的非中文字符。

2.提取除汉字外的部分

我们在单元格中输入公式:=REGEXP(A2,\”[^一-龟]+\”),这里的[^一-龟]+,表示所有的非中文字符,最后回车后得到提取结果。

3、提取第一个汉字起的内容

我们需要提取第一个汉字起的所有内容,在单元格中输入公式:=REGEXP(A2,\”[一-龟].+\”),[一-龟].+表示以汉字开头的字符集。

4、提取所有的文字内容

我们在单元格中输入公式:=REGEXP(A2,\”[一-龟]\”),或者=REGEXP(A2,\”[一-龥]\”)即可,[一-龥]+表示所有汉字。当我们不需要提取生僻字时,可以使用“[一-龟]+”,公式输入会更方便。

Excel VBA【案例】正则表达式提取中文字符/五笔字型编码文本整理

本文于2023年9月21日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!

内容提要

  • 正则表达式提取中文字符

大家好,我是冷水泡茶,今天在EXCELHOME论坛上看到一个求助贴:如何用VBA把连续拼音字符去掉?

下了附件一看,他的数据是这样的:

经过一通分析,这应该是一个输入法的码表,前面是五笔字型编码,后面是词组,但是混合了拼音。

他现在要把拼音去掉,变成右侧五笔字型编码+词组的形式。

到底应该怎么做呢?

如果从他的提问的方向出发,“去掉”拼音,我们得设法“去掉“英文字和“|”符号,似乎不太好下手,因为前面也有拼音;如果要判断连续的英文字母是汉语拼音,好象也没有什么好办法。

其实,我们换一个角度来考虑,他“要保留什么”,问题就好解决了。即保留前面几位字母和后面的汉字,当然也并非如此简单。

我们可以采用正则表达式提取中文字符,再从前面截取几位字母,应该能达成楼主的需求,分享给大家:

基本思路:

1、把B:C列原始数据读入数组arr()。

2、循环数组,利用正则表达式提取第1列中的中文字符。

3、从数组第1列字符中截取第一个空格前的字符(原本是截取5位,4个字母+1个空格,后来发现编码有3位的)。

4、把第3、第2条所得的字符拼接起来。

5、把拼接的字符写入数组的第2列。

6、把数组回写到工作表。

VBA代码

1、在模块1里,process过程

代码解析:

(1)Line2,容错语句,防止正则表达式匹配不到内容报错。

(2)Line3~7,定义变量,数组、工作表对象、字典对象、正则表达式对象等。

(3)line12,正则表达式的模式(pattern),匹配任意数量的中文与数字。这里原来仅仅匹配中文的,但在测试中发现,个别文本中还带有数字。

(4)line16,把原始数据装入数组arr()。

(5)line17~26,循环数组,逐个处理第一列字符,把结果存到第二列。

(A)line18,把第一列字符赋值给str1,方便后面引用。

(B)line19,进行正则表达式的匹配。

(C)line20~25,对匹配结果进行处理,把多个匹配结果连接起来,中间空一格,去掉尾部多余的空格,赋值给str2;把第一列字符第一个空格及前面的字符截取出来,并与str2相连接,存到数组第二列。

(6)line27,把数组结果回写到工作表。

2、在工作表Sheet1里,命令按钮

代码解析:

(1)Line1~3,调用process处理过程。

(2)Line5~9,清除C列生成的内容,这主要是为了演示的需要,在process过程中也有清除内容的语句。

动画演示

总结

1、用正则表达式处理字符串,非常方便。

2、我们考虑问题的时候,如果正面处理没法下手,可以试试换一个角度看问题。

~~~~~~End~~~~~~

喜欢就点个、点在看留言评论、分享一下呗!感谢支持!

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。