作者:绿色风
分类:
时间:2022-08-17
浏览:144
楼主 wise |
Q:如何用VBA正则表达式查找字母与数字相间隔的字符长度是6的字符? 如a1b1c1这个就是字母与数字相间,而a11a2a这个则不是 A:ALT+F11→插入模块→在模块中输入以下代码:
- Sub 字母与数字相间隔的字符()
- Dim str As String
- Dim reg As Object
- Dim i As Long
- Dim matcher As Object
- str = "12124 A1B1C1 40123 a1d2c4b8"
- '后期绑定调用正则表达式
- Set reg = CreateObject("VBscript.regexp")
- With reg
- .Global = True
- .ignorecase = True
- '关键是对于\w 及\d的理解
- .Pattern = "\w\d\w\d\w\d"
- End With
- Set matcher = reg.Execute(str)
- For i = 0 To matcher.Count - 1
- Debug.Print matcher.Item(i)
- Next i
- End Sub
注意:\d表示任何一个数字字符,等价于[0-9];而\D表示任何一个非数字字符,等价于[^0-9];\w表示为任何一个字母数字字符,大小写均可,或下划线字符,等价于[a-zA-Z0-9_];\W则与\w相反 |
2楼 wise |
- .Pattern = "(\w\d){3}"
替换- .Pattern = "\w\d\w\d\w\d"
这个更好一点 |
3楼 DJ_Soo |
- .Pattern = "(\w\d){3}"
原来括号后面加数字固定出现次数是要加{}的,多谢小7 |
4楼 DJ_Soo |
- Sub test()
- Dim RegExp As Object
- Const Str As String = "as123asd131232asd123123zsdasf11dsad3sz111111AASD"
- Set RegExp = CreateObject("vbScript.regexp")
- Dim aaa
- With RegExp
- .Global = True
- .Pattern = "(\d{1}.{6}[a-z]{1}|[a-z]{1}.{6}\d{1})"
- aaa = .Replace(Str, "($1)")
- MsgBox aaa
- End With
- End Sub
数字和字母之间相隔六位的我的代码 |
5楼 bluexuemei |
为什么d2c4b8不符合呢? |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一