其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

vba正则表达式出错

GG网络技术分享 2025-03-18 16:14 10


问题描述:

vba正则表达式匹配 报错“运行时错误 5017”

Sub test()

Dim regEx, Match, matches ' 建立变量。 Set regEx = CreateObject("vbscript.regexp") ' 建立正则表达式。 regEx.Pattern = "(?<![\\u4e00-\\u9fa5])张三(?![\\u4e00-\\u9fa5])" ' 报运行时错误 5017 'regEx.Pattern = "张三" '不会报错 regEx.IgnoreCase = True ' 设置是否区分字符大小写。 regEx.Global = True ' 设置全局可用性。 regEx.MultiLine = True '设置多行匹配 strng = "6. a张三(1) ,我不是 张三丰" '只匹配第一个张三,不匹配张三丰那个张三 Set matches = regEx.Execute(strng) ' 执行搜索。End Sub

我想匹配“张三”这个名字,但是名字之间有空格,标点符号,数字等分割。我写了正则表达式匹配 "(?<![\\u4e00-\\u9fa5])张三(?![\\u4e00-\\u9fa5])",这个表达式我在线测试网站https://c.runoob.com/front-end/854/ 可以通过,但是在vba中报错。请问有什么解决办法。

网友观点:

VBA正则表达式不支持(?<=...)和(?<!...)
你是要 "张三" 前后不能有别的中文改成这样即可

regEx.Pattern = "\\b张三\\b"

vba兼容性不好

可以替换此图案的所有引用:

^[^0-9+-]+|([+-])[^0-9]+|([0-9])[^0-9.]+
with

$1$2
请看regex演示。

与VBA正则表达式引擎不支持的lookbehind((?<=...))不同,您可以使用捕获组,并通过对捕获值的反向引用恢复结果中捕获的文本。

斜杠之类的需要转义字符吧。

VBA学习笔记37:正则表达式1

学习资源:《Excel VBA从入门到进阶》第37集 by兰色幻想


本篇写讲正则表达式的基础知识。

一、正则表达式的作用

正则表达式是处理字符串的外部工具,它可以根据设置的字符串对比规则,进行字符串的对比、替换等操作。它的作用如下:

1、完成复杂的字符串判断,功能远远强于like函数。

2、在字符串判断时,可以最大限度的避开循环,从而达到提高运行效率的目的。


例:把字符串“我爱Excel精英345690培训”中的数字和文字分开提取出来。

分析:按之前所学,应该使用循环,判断字符串中的每一个字符是数字还是文字,然后提取。

标签:

提交需求或反馈

Demand feedback