WPS Excel正则表达式函数提取复杂字符串文本 您所在的位置:网站首页 wps文件类型没有加载宏xlam WPS Excel正则表达式函数提取复杂字符串文本

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

2023-03-09 20:49| 来源: 网络整理| 查看: 265

WPS Excel本身没有正则表达式函数,可以利用 wps js自定义函数的功能来封装正则表达式函数,这样可以直接在单元格里用公式来使用正则表达式,wps2020以后的版本只要支持js宏都可以用,先看动画效果:

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

只要把代码保存为xlam加载宏文件,然后再添加到加载项里,所有的工作簿都可以使用自定义函数,js源码在最下面

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

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

字符串:引用单元格或者直接输入文本都可以

匹配模式:/表达式/修饰符,例如匹配连续数字:\d+,要写成/\d+/

全局匹配写成/\d+/g;全局匹配字母忽略大小写 /title/gi

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

索引:返回匹配到的第几个项

连接符:指定字符拼接所有匹配到的文本

案例:用换行符拼接提取到的全部137、189、166开头的手机号

字符串:15555555555、13716888157、17766688888、16655、16677788786、18916888689 匹配模式:(137|189|166)\d{8} 写成 /(137|189|166)\d{8}/g 即可

二、RegExpReplace函数,替换匹配到的字符

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

字符串:同上

匹配模式:同上

替换的文本:指定替换后的文本

案例:将‘数字 + 斤’全部替换为‘1000斤’

字符串:苹果1500斤,香蕉9万斤,火龙果300斤,橘子6万斤,柿子5万斤 匹配模式:/\d+[万斤]+/g

三、正则表达式函数js源码 //正则表达式匹配函数 //单元格引用函数方法 =RegExpMatch(字符串(必选), 表达式(必选), 索引(可选), 连接符(可选)) function RegExpMatch(text, pattern, index = 0, joint) { //单元格引用函数的时候,参数可能返回的是单元格,需要从单元格提取值 if (typeof (text) == 'function') text = text.Value2 if (typeof (pattern) == 'function') pattern = pattern.Value2 if (typeof (index) == 'function') index = index.Value2 if (typeof (joint) == 'function') joint = joint.Value2 let i = pattern.lastIndexOf('/') //返回/字符最后的索引 , e = pattern.slice(1, i) //提取表达式 , m = pattern.slice(i + 1) //提取修饰符 , re = new RegExp(e, m) //创建正则对象 if (re.test(text)) { let mch = text.match(re) if (joint) return mch.join(joint) if (index >= mch.length) return '超出索引范围[0, ' + (mch.length - 1) + ']' return mch[index] } else { return '无匹配' } } //正则表达式替换函数 //单元格引用函数方法 =RegExpReplace(字符串(必选), 表达式(必选), 替换的文本(必选)) function RegExpReplace(text, pattern, replaced) { if (typeof (text) == 'function') text = text.Value2 if (typeof (pattern) == 'function') pattern = pattern.Value2 if (typeof (replaced) == 'function') replaced = replaced.Value2 let i = pattern.lastIndexOf('/') //返回/字符最后的索引 , e = pattern.slice(1, i) //提取表达式 , m = pattern.slice(i + 1) //提取修饰符 , re = RegExp(e, m) //创建正则表达式对象 return text.replace(re, replaced) }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有