Products
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((?<=...))不同,您可以使用捕获组,并通过对捕获值的反向引用恢复结果中捕获的文本。
斜杠之类的需要转义字符吧。
学习资源:《Excel VBA从入门到进阶》第37集 by兰色幻想
本篇写讲正则表达式的基础知识。
一、正则表达式的作用
正则表达式是处理字符串的外部工具,它可以根据设置的字符串对比规则,进行字符串的对比、替换等操作。它的作用如下:
1、完成复杂的字符串判断,功能远远强于like函数。
2、在字符串判断时,可以最大限度的避开循环,从而达到提高运行效率的目的。
例:把字符串“我爱Excel精英345690培训”中的数字和文字分开提取出来。
分析:按之前所学,应该使用循环,判断字符串中的每一个字符是数字还是文字,然后提取。
Demand feedback