新版REGEXP函数教程

wyatt
wyatt

@金山办公

函数介绍

=REGEXP(原始字符串,正则表达式,匹配模式,替换内容)

功能:根据传入参数进行提取/匹配/替换操作,返回处理结果,如果有多个处理结果则以数组形式返回

原始字符串:可以是单元格引用、字符串、数组

正则表达式:要用来匹配的正则表达式(支持PCRE2语法标准)

匹配模式:共有4个选项

0(默认):提取模式,将符合正则的内容提取出来,返回的内容如果有多个,则返回数组

  • 对于单一字符串提取,若有多个提取结果,会以数组形式返回全部提取结果

  • 对于数组参数提取,会只取每个数组元素提取结果的第一个值,返回一个与数组大小相同的结果数组

1:判断模式,判断原始字符串内是否有符合正则表达式的内容,返回TRUE/FALSE

2:替换模式,将原始字符串中的符合正则表达式的内容替换成参数4,返回替换后的字符串

3:完整提取模式,对于单一字符串提取结果和0相同,对于数组参数提取时,不会仅取提取每个结果第一个值,而是得到完整的提取结果数组,这个数组可以通过其他函数进行二次处理。

替换内容:仅当匹配模式为2的时候生效,是要替换成的内容,如果不传则默认为空内容,相当于删除符合正则表达式的内容

正则表达式常用元素

示例

(部分来自社区帖子)

提取模式:

判断模式

替换模式

完整提取模式

=REGEXP("张三zs100李四ls200",{"[一-龟]+","[a-z]+","[\d]+"})的提取结果为

张三 zs 100

当参数一改为以下矩阵

=REGEXP(A1:C4,"[一-龟]+",3)的提取结果为

看起来与=REGEXP(A1:C4,"[一-龟]+",0)的结果相同,但是实际上每个单元格并不仅是“张三”,而是{“张三”,“李四”}的数组

使用=MAP(REGEXP(A1:C4,"[一-龟]+",3),LAMBDA(x,INDEX(x,2)))函数便可以提取到“李四”

对于数组参数的支持

参数一、二均可以使用数组,在参数是单元格、单行、单列、矩阵时会有不同的计算规则

以下为例

参数二为数组,参数一为单元格

结果为参数二大小相同的数组,

结果的每个元素:对参数一执行参数二对应元素的正则表达式匹配结果

参数二为多行多列数组,参数一为多行多列数组

返回结果为长宽均为参数一二最大值的矩阵(如参数一为2*3矩阵,参数二为3*2矩阵,则结果为3*3矩阵),对于重合区域,从参数一和参数二中取相应的值计算,只取第一个结果,非重合区域,返回NA错误

参数二为一行多列数组,参数一为多行多列数组

返回结果为长宽均为参数一二最大值的矩阵,用参数二的每一列的元素,计算参数一的每一列,若参数二列数大于或小于参数一,匹配不上的列数返回NA错误

参数二维为单列数组,参数一为多行多列数组

返回结果为长宽均为参数一二最大值的矩阵,用参数二的每一行的元素,计算参数一的每一行,若参数二行数大于或小于参数一,匹配不上的行数返回NA错误

广东省
浏览 3055
25
70
分享
70 +1
36
25 +1
全部评论 36
 
MusicZone
太难了,直接看不懂了
· 云南省
回复
 
admin
学习
· 北京
回复
 
答案
三维数组都干出来了
· 浙江省
回复
 
答案
好难,学不会啊
· 浙江省
回复
 
赵二
REGEXP函数
· 辽宁省
1
回复
 
路人甲
学习了,谢谢~!
· 湖北省
1
回复
 
魏朝先
请问如何替换整个匹配? 例如 =REGEXREPLACE("abc", ".", "-$0") 返回的结果是 -a-b-c 我测试 =REGEXP("abc", ".", 2, "-\0") 并不正确
· 江西省
1
回复
魏朝先
我知道可以用子捕获组来实现,例如 =REGEXP("abc", "(.)", 2, "-\1") 我的疑惑是,REGEXP 如何表示整个匹配,还是说不支持这个特性?
· 江西省
1
回复
 
Happy凡人
高手,有没有入门级的,这个暂时看不懂
· 湖北省
1
回复
 
小宇
学习了,不过感觉好复杂啊
· 湖南省
1
回复
 
panda
· 四川省
1
回复
 
李强
学到了! 大佬,请收下我的膝盖!
· 山西省
回复
 
admin
学习
· 北京
1
回复
 
薛定谔的北斗星
学到了
· 北京
回复
 
刘杰
学习打卡
· 内蒙古
回复
 
厚积、薄发
11
· 山东省
回复
 
Karlie
打卡打卡
· 广东省
回复
 
HLWPCAPS
打卡
· 黑龙江省
回复
 
WPS_1650177430
1
· 北京
回复
 
Mr Chen
Mr Chen

创作者俱乐部成员

打卡
· 甘肃省
回复
 
LG
111
· 新疆
回复