分享

WPS Excel正则表达式函数提取复杂字符串文本

 百鸣村 2024-04-22 发布于湖北

WPS Excel本身没有正则表达式函数,这里用 WPS自定义函数的功能来实现,封装好函数后就可以在单元格用公式使用正则表达式了,WPS2020之后的版本都可以用,先看动画效果:

通过WPS宏编辑器自定义RegExpMatch、RegExpReplace两个函数,把代码保存为xlam文件(没有工作表的工作簿),然后添加到加载项,就能自动跟随Excel启动,不必每次手动打开,并且所有工作簿都能使用。

示例文件地址:https://download.csdn.net/download/huaermeier/87577827

  1. //正则表达式匹配函数
  2. //单元格引用函数方法 =RegExpMatch(字符串(必选), 表达式(必选), 索引(可选), 连接符(可选))
  3. function RegExpMatch(text, pattern, index = 0, joint) {
  4. //单元格引用函数的时候,参数可能返回的是单元格,需要从单元格提取值
  5. if (typeof (text) == 'function') text = text.Value2
  6. if (typeof (pattern) == 'function') pattern = pattern.Value2
  7. if (typeof (index) == 'function') index = index.Value2
  8. if (typeof (joint) == 'function') joint = joint.Value2
  9. let i = pattern.lastIndexOf('/') //返回/字符最后的索引
  10. , e = pattern.slice(1, i) //提取表达式
  11. , m = pattern.slice(i + 1) //提取修饰符
  12. , re = new RegExp(e, m) //创建正则对象
  13. if (re.test(text)) {
  14. let mch = text.match(re)
  15. if (joint) return mch.join(joint)
  16. if (index >= mch.length) return '超出索引范围[0, ' + (mch.length - 1) + ']'
  17. return mch[index]
  18. } else {
  19. return '无匹配'
  20. }
  21. }
  22. //正则表达式替换函数
  23. //单元格引用函数方法 =RegExpReplace(字符串(必选), 表达式(必选), 替换的文本(必选))
  24. function RegExpReplace(text, pattern, replaced) {
  25. if (typeof (text) == 'function') text = text.Value2
  26. if (typeof (pattern) == 'function') pattern = pattern.Value2
  27. if (typeof (replaced) == 'function') replaced = replaced.Value2
  28. let i = pattern.lastIndexOf('/') //返回/字符最后的索引
  29. , e = pattern.slice(1, i) //提取表达式
  30. , m = pattern.slice(i + 1) //提取修饰符
  31. , re = RegExp(e, m) //创建正则表达式对象
  32. return text.replace(re, replaced)
  33. }

函数使用说明

一、RegExpMatch函数,提取匹配到的字符

RegExpMatch(字符串(必选),匹配模式(必选),索引(可选),连接字符(可选))

参数引用单元格或者直接输入都可以

参数

数据类型

描述

字符串

文本

必选。要处理的字符串

匹配模式

文本

必选。和js正则表达式语法一样:/模式/修饰符,例全局匹配连续数字/\d+/g

全局匹配title并忽略大小写/title/gi

修饰符g表示全局、i忽略大小写、m多行模式、s包括换行符

索引

数字

可选。返回匹配到的第几项,索引从0开始

连接字符

文本

可选。指定字符,拼接所有匹配到的项

案例1:匹配最后一项带大写字母W的数据

数据在A列,B2单元格输入公式:=RegExpMatch(A2,"/\d{3,4}W(?=[^W]+$)/")

案例2:全局匹配137、189、166开头的11位连续数字,用换行符拼接所有匹配项,文本在A2单元格,CHAR(10)在Excel中表示换行符
案例3:全局匹配137、189、166开头的11位连续数字,返回第3个匹配到的项,索引从0开始,所以第3项索引值为2
  1. A2单元格字符串:15555555555、13716888157、17766688888、16655、16677788786、18916888689
  2. 匹配模式:/(137|189|166)\d{8}/g
  3. 案例1:=RegExpMatch(A2,"/(137|189|166)\d{8}/g",0,CHAR(10))
  4. 案例2:=RegExpMatch(A2,"/(137|189|166)\d{8}/g",2)
二、RegExpReplace函数,替换匹配到的字符

RegExpReplace(字符串(必选),匹配模式(必选),替换的文本(必选))

参数引用单元格或者直接输入都可以

参数

数据类型

描述

字符串

文本

同上

匹配模式

文本

同上

替换的文本

文本

必选。指定替换成的文本

案例4:将一段字符串的'数字 + 斤’全部替换为'1000斤’,文本在A8单元格
  1. 字符串:苹果1500斤,香蕉9万斤,火龙果300斤,橘子6万斤,柿子5万斤
  2. 匹配模式:/\d+[万斤]+/g
  3. 案例3:=RegExpReplace(A8,"/\d+[万斤]+/g","1000斤")

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多