在Excel中,使用VBScript正则表达式自定义函数是历史悠久的功能,网上有许多类似的自定义函数,主要针对单个文本处理,通常只需四五行代码即可完成。然而,WPS在2024年4月推出regexp函数后,有开发者仿照其参数,编写了一个自定义函数,利用VBA中VBScript的正则表达式功能,增加了对数组、单元格、文本等多种数据的处理能力。这种自定义函数的代码行数较多,但仍然在非office365测试通道及vol版本的Excel中具有实用价值。以下是用于复制粘贴到VBE环境模块中的函数代码示例:函数参数说明如下:参数1:findin,可以是文本或单元格。若为多个单元格,findwhat必须是文本,返回横向结果。参数2:findwhat,其正则表达式可以是文本、横向数组或纵向单元格。若为文本,可横向返回多个匹配结果;若为数组或单元格,且每个表达式有多个结果,函数返回第一个结果,横向输出。参数3:可选参数,有三种模式:0为匹配模式(execute),1为替换模式(replace),2为测试模式(test),默认值为0。参数4:替换值,支持文本和正则表达式。参数5:当有多个值匹配时,返回第几个值,默认值为0,返回所有值。参数6:是否忽略大小写,默认值为true。在实际应用中,可以通过以下示例来理解函数的使用:按单字符展开,横向展开:=TOCOL(regexp(A3,"."))获取多个单元格中的值,横向输出第一个值:=regexp(A40:A42,"[0-9.-]+")处理单个单元格时,可横向输出所有匹配的值:=regexp(A42,"[0-9.-]+")返回的多个值默认为文本值,若需要累加,需先转换为数值,再求和:=SUM(--regexp(A40,"[0-9.-]+"))批量提取中文:=regexp(A51,"[一-龟]+")批量提取非中文:=regexp(A51,"[^一-龟]+")按多个分隔符拆分:=regexp(A74,"[^*/-]+")提取最后一个指定字符之前的内容(不含):=regexp(A99,"^.*(?=\\)")替换掉括号中的内容:=regexp(A144,"([(\(][^()]*[一-龟]+[^()]*[\))])|(【.*?】)",2,"")注意,函数不支持某些特定符号,如需获取数据后去掉最前面的部分,应使用:=regexp(A130,"(?:[^一-龟\w])([一-龟]\w+)")第二参数可以是数组,支持数组输出:=regexp(A139,{"[^一-龟]+","[一-龟]+"})第二参数支持多个单元格,如:=regexp(A143,D143:D144)批量提取不连续简称的全称:=TOCOL(regexp($A$147:$A$148,".*"®exp(B147,"(.)",2,"$1.*")),3)在WPS的正则表达式中,使用/1表示查找部分正则表达式中的第一个括号中的部分;在word的通配符中,同样使用/1。而在Excel中,全部使用$1。由于不支持某些特定符号(如?<=),在替换时只能获取数据后去掉最前面的部分。例如,函数的使用示例:=regexp(A171,"(?=\d)(?=(?:\d{3})+($|[^\d年]))",2,",")以上展示了Excel中VBScript正则表达式自定义函数的强大应用,通过灵活的参数配置,可以实现复杂的文本处理任务。