乐于分享
好东西不私藏

提取拆分字符串,用REGEXP函数解锁WPS表格的文本处理超能力

提取拆分字符串,用REGEXP函数解锁WPS表格的文本处理超能力

你是否曾在表格里为处理杂乱文本头疼过?要从混杂了文字、数字、符号的单元格里提取姓名、电话号、数量、金额等,要批量校验几千条号码格式是否正确,要把不规范的日期统一成标准格式等等。过去这些操作要么需要嵌套好几层文本函数,要么只能手动一条条修改,效率低还容易出错。

作为WPS表格独有的正则表达式函数,REGEXP函数的出现直接解决了这些痛点。它把强大的正则表达式能力封装成了简单的函数形式,只需一个公式就能实现从前复杂操作才能完成的文本处理需求,真正让复杂文本处理变得简单高效。

01

REGEXP函数基础说明

REGEXP函数基于Perl兼容的正则表达式(PCRE)语法标准,支持文本的提取、判断、替换三大核心能力,默认区分大小写,语法结构非常简洁:

=REGEXP(原始字符串, 正则表达式, [匹配模式], [替换内容])
参数
是否必填
说明
原始字符串
需要处理的文本内容,可以是单元格引用或直接输入的文本
正则表达式
用于匹配文本规则的表达式,决定了函数要匹配的内容特征
匹配模式
否(默认0)
0:提取模式,返回匹配到的文本结果(数组)1:判断模式,返回TRUE/FALSE判断是否匹配2:替换模式,用指定内容替换匹配到的文本3:完整提取模式,返回所有匹配结果(多维数组,适合多值场景)
替换内容
否(仅模式2生效)
替换模式下用于替换匹配内容的文本,支持用\1\2引用正则表达式中的分组内容

02

新手必备基础正则规则

新手也不用害怕正则表达式复杂,日常90%的场景用以下几个基础规则就能覆盖,规则可直接使用。更多常用的规则表达式,已放到文末列表。

规则
含义
示例
\d
匹配任意单个数字
\d{11}

 匹配11位手机号
[一-龟]
匹配任意单个常用汉字
[一-龟]{2,4}

 匹配2-4个汉字的姓名
[A-Za-z]
匹配任意单个英文字母
[A-Za-z0-9._%+-]+@

 匹配邮箱@前的用户名
+
匹配前面的规则1次或多次
\d+

 匹配连续的多个数字
^/$
匹配字符串开头/结尾
^1[3-9]\d{9}$

 严格匹配完整手机号
()
分组标记,可在替换时引用
(\d{3})\d{4}(\d{4})

 把手机号拆分为前3位、中间4位、后4位

03

高频场景使用案例

下面的案例均来自真实办公场景,公式可以直接套用。

案例1:数据格式校验(判断模式)

场景:校验客户信息表中的手机号是否符合11位规范,避免后续通知短信发送失败。

=REGEXP(A2,"^1[3-9]\d{9}$",1)

效果:符合规范的手机号返回TRUE,格式错误(比如位数不对、号段不存在)的返回FALSE,配合条件格式可以一键标红错误数据。

正则解析

  • ^1            限定手机号必须以1开头
  • [3-9]         限定第二位为3-9的有效号段
  • \d{9}         限定后面9位均为数字
  • $             限定整个字符串长度为11位,避免多字符错误

案例2:特定内容提取(提取模式)

场景:从混有汉字、数字、符号的快递地址里,批量提取所有手机号码。公式

=REGEXP(A2,"(?<=^|\D)1[3-9]\d{9}(?=\D|$)")

效果:即使单元格里同时包含姓名、地址、多个手机号,也能精准把所有手机号提取出来。

正则解析

  • (?<=^|\D)        

     用于限定我们要匹配的内容(比如手机号),它的前面必须是「字符串开头」或者「非数字字符」,如果不限定,那么一长串数字中,如有符合手机号规则的,也会被匹配进来。具体请看示例图片

  • 1[3-9]\d{9}        

    匹配11位手机号,且是1开头,第二位是3-8的数字串

  • (?=\D|$)            

    与前面的前面限定配套使用,限定必须是【字符串】或者【非数字】结尾,以确保不会误截取。

括号内的规则解释后面会作更具体的解答,请留意后续发表的文章

案例3:特定内容提取后计算(提取模式进阶用法)

场景如果需要提取数字并直接求和或乘积的,套个SUM、PRODUCT函数即可,如根据规格得体积、根据数量单价得金额等公式

=SUM(--REGEXP(A2,"[0-9.-]+"))=PRODUCT(--REGEXP(A2,"[0-9.-]+"))

效果:提取单元格,混合记录的数量,单价,长宽高等数据,并计算

正则解析

  • [0-9.-]+

     []里面是范围,表示提取0-9之间的数字,小数点,负号,括号外面的+表示匹配一次或多次

  • –REGEXP()

    前面的两个负号的作用是让提取的字符经过负负运算转换为数字类型,负号其实可以用Value()函数套进去转换,但–更直接。

案例4:批量内容替换(替换模式)

场景:导出的客户信息中手机号是明文显示,需要批量把中间4位替换为****,实现隐私脱敏。

公式

=REGEXP(A2,"(\d{3})\d{4}(\d{4})",2,"\1****\2")

效果:原始数据: 张三,13800138000 结果:张三,138****8000

正则解析

  • (\d{3}),(\d{4})

     用()分组提取,提取出来的结果用于后面的替换,这里分别提取前3位,后4位

  • 中间的2参数,是替换模式

  • \1****\2

    \1表示第一组提取结果,即(\d{3}),\2表示第一组提取结果,即(\d{4})

04

常用的正则规则

常见规则
规则说明
[0-9]
指从0到9的数字范围
\d
等同于[0-9]
\d{2}
指匹配任意2位数字。2可以是任何正整数
[A-Z]
A到Z的大写字母
[a-z]
a到z的小写字母
[A-z]
所有大小写字母,也可以写成[a-zA-Z]
\w
数字和大小写字母
[一-龟]
常用的汉字集合
[一-龥]
所有汉字集合
[一-龟]+
任意汉字组成的连续字符号,即连续的汉字串
[A-z]+
任意大小写字母组成的字符串
[0-9.-]+
任意整数、小数、或负数的字符串
[A-z].+
以字母开头的所有字符串
[一-龟].+
以汉字开头的所有字符串
[^0-9]
非数字
\D
等同于[^0-9]
[^A-z]
非字母
[^一-龟]
非中文
\W
非数字和字母
正则表达式函数对于文本处理能力非常强大,后续将继续推出该函数的一些使用案例,尽量让我们在日常工作中复制粘贴即可使用。