在VBA中使用正则表达式
'引用了Microsoft VBScript Regular Expressions 5.5 后就可以声明正则相关对象了。主要有三个对象:RegExp、MatchCollection、Match。
'1. RegExp 这是VB使用正则表达式匹配模式的主要对象了。其提供的属性用于设置那些用来比较的传递给 RegExp 实例的字符串的模式。 其提供的方法以确定字符串是否与正则表达式的特定模式相匹配。
'属性:
'Pattern:一个字符串,用来定义正则表达式。
'IgnoreCase:一个布尔值属性,指示是否必须对一个字符串中的所有可能的匹配进行正则表达式测试。这是MS的解释,有点费解,实际使用中的实例是,如果True,则忽略英文字母大小的匹配,False对大小写进行匹配。
'Global:设置一个布尔值或返回一个布尔值,该布尔值指示一个模式是必须匹配整个搜索字符串中的所有搜索项还是只匹配第一个搜索项。
'MultiLine:这个MS没有介绍。查了一下资料,设置一个布尔值或返回一个布尔值,是否在串的多行中搜索。如果允许匹配多行文本,则multiline为true,如果搜索必须在换行时停止,则为false 。
'方法:
'Execute:返回一个 MatchCollection 对象,该对象包含每个成功匹配的 Match 对象。
'Replace:MS没有介绍,这是返回一个将匹配字符替换为指定字符的字符串。
'Test:返回一个布尔值,该值指示正则表达式是否与字符串成功匹配。
'2. MatchCollection 是集合对象,包含有关匹配字符串的信息,该对象包含每个成功匹配的 Match 对象。
'属性
'Count: 匹配对象的总数?
'Item: 匹配对象的索引?
'3. Match 是成功匹配的对象。
'属性:
'FirstIndex: 匹配对象所匹配字符串的起始位置?
'Length: 匹配对象所匹配字符串的字符长度?
'SubMatches: 匹配对象所匹配结果的子项?
'Value: 匹配对象所匹配的值?
Sub dd()
Dim s As String
Dim p As String
Dim reg As RegExp 'VB使用正则表达式匹配模式的主要对象
Dim mc As MatchCollection '是集合对象,包含有关匹配字符串的信息,该对象包含每个成功匹配的 Match 对象
Dim m As Match '成功匹配的对象
Dim sms As SubMatches '匹配对象所匹配结果的子项
Dim i As Long
s = "我女朋友的生日是:1983-11-12 "
p = "([\d]{4})-([\d]{2})-([\d]{2}) "
Set reg = New RegExp
reg.Pattern = p 'pattern:一个字符串,用来定义正则表达式
Set mc = reg.Execute(s) 'Execute:返回一个 MatchCollection 对象,该对象包含每个成功匹配的 Match 对象
For Each m In mc
MsgBox m.Value
Set sms = m.SubMatches
For i = 0 To sms.Count - 1
MsgBox sms.Item(i)
Next i
Set sms = Nothing
Next m
Set mc = Nothing
Set reg = Nothing
End Sub
Function bTest(ByVal s As String, ByVal p As String) As Boolean
Dim re As RegExp
Set re = New RegExp
re.IgnoreCase = False '设置是否匹配大小写
re.Pattern = p
bTest = re.Test(s)
End Function
Private Sub Command1_Click()
Dim s As String
Dim p As String
s = "我的邮箱: test@163.com 。欢迎致电!"
'测试字符串中是否包含数字:
p = "\d+"
MsgBox bTest(s, p)
'测试字符串中是否全是由数字组成:
p = "^\d+$"
MsgBox bTest(s, p)
'测试字符串中是否有大写字母:
p = "[A-Z]+"
MsgBox bTest(s, p)
End Sub
Function StrReplace(s As String, p As String, r As String) As String
Dim re As RegExp
Set re = New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = p
StrReplace = re.Replace(s, r)
End Function
Private Sub Command2_Click()
Dim s As String '字符串
Dim p As String '正则表达式
Dim r As String '要替换的字符串
'以下代码是替换邮箱地址
s = "我的E-mail: Test@163.com 。欢迎致电!"
p = "\w+[\w.]*@[\w.]+\.\w+"
r = "E_Mail@sohu.net"
s = StrReplace(s, p, r)
Debug.Print s
'结果:我的E-mail: E_Mail@sohu.net 。欢迎致电!
End Sub
Private Sub Command3_Click()
Dim re As RegExp
Dim mh As Match
Dim mhs As MatchCollection
Dim inpStr As String
inpStr = "我的E-mail: lucky@163.com 。欢迎致电!"
Set re = New RegExp
re.Pattern = "(\w+)@(\w+).(\w+)" '同样是匹配地址,注意和上例的不同
Set mhs = re.Execute(inpStr)
Set mh = mhs(0) '只有一个匹配
Debug.Print "电子邮件地址是: " & mh.Value '这里是匹配的内容
Debug.Print "用户名是: " & mh.SubMatches(0) '第一个括号中的内容
Debug.Print "邮箱是: " & mh.SubMatches(1) '第二个括号中的内容
Debug.Print "域名是: " & mh.SubMatches(2) '第三个括号中的内容
End Sub
转帖http://club.excelhome.net/thread-672121-1-1.html
在VBA中使用正则表达式相关推荐
- VBA中的正则表达式(一)
VBA中的正则表达式(一) --Global属性 1. 正则表达式的用处 从给定的文本中,找到符合正则表达式规则的文本,并提取出来.例如从一串字符串中找到电话号码.找到邮箱地址等. 上述是正则表达式的 ...
- VBA中的正则表达式(三)
VBA中的正则表达式(三) --Pattern属性和Execute方法 1. Pattern属性 该属性没有固定的可选值,是设置正则表达式规则使用的. 2. 正则表达式中各符号代表的含义 字符 描述 ...
- VBA中的正则表达式(二)
VBA中的正则表达式(二) --IgnoreCase属性 1. IgnoreCase属性 IgnoreCase属性有两个可选值,True或False. 2. IgnoreCase属性案例 Sub re ...
- 如何在单元格和循环中使用Microsoft Excel中的正则表达式(Regex)
本文翻译自:How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops How can I use ...
- VBA中关于WORD的基本应用 比如批量改页眉页脚,从文件名取数字作为页眉等等。
VBA中关于WORD的基本应用 比如批量改页眉页脚,从文件名取数字作为页眉等等. 以下是代码,直接在Word的VBA编辑器里粘贴上去就OK了. Sub 批量转PDF() Dim i As Varian ...
- note-在VisualStudio中使用正则表达式
前言:本来昨天已经写了,但由于意外给搞丢失了,由于刚刚看了这篇文章知道了一些真相:现在的心理状态已经和昨天不一样了,昨天是满心的高兴,对VisualSduio很有好感,当时自认为是没有把正则学好,所以 ...
- ASP.NET 中的正则表达式
引言 Microsoft®.NET Framework 对正则表达式的支持是一流的,甚至在 Microsoft® ASP.NET 中也有依赖正则表达式语言的控件.本文介绍了深入学习正则表达式的基础知识 ...
- 52 JavaScript中的正则表达式
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.什么是正则表达式 正则表达是(regular expression)是用于匹配字符串中 ...
- java中正则表达式 ?=_Java中的正则表达式
正则表达式: 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串 ...
最新文章
- MBTiles离线包生成和使用
- AI一分钟 | ​被大家吐槽的网红机器人索菲亚开微博了;阿里人工智能团队iDST获得道路场景分割三项第一
- 三张图助您掌握OTN分层结构
- C#中的delegate的 Invoke 、BeginInvoke的区别
- 不止 Windows 10!Windows 7/8 也能免费升级到 Windows 11
- ROS2——Win10上的rqt_graph无法正常运行
- dxf文件预览打开编辑相关控件推荐
- POJ NOI0105-32 求分数序列和
- Python将矩阵格式数据在Console全部显示
- qq四国军旗2.1 beat03 builde017记牌器开发思路(二)
- JavaScript数据源版省市县三级联动
- hive表加载csv格式数据或者json格式数据
- Android Studio初学者实例:Fragment学习--仿美团外卖界面
- Django快速入门教程
- SSL用pem和key文件生成jks文件
- 知识图谱相关会议之观后感分享与学习总结
- syft要求低配环境 v.s. 硬件要求高配环境:报错全记录
- WINME/WIN2000/LINUX多重启动详解(4年前写的,不知道现在还有没有用)
- 使用layui框架的杰作(91uu.net)
- 智能医院导航导诊系统,门诊地图导航怎么做?
热门文章
- centos安装后连不上网
- jQuery EasyUI 下拉菜单获取日期,最高年份为当前年份,最低年份为当前年份向前推10年...
- libqrencode 3.4.3 发布,二维码的C解析库
- 判断用户是否开启定位功能 / 判断用户是否为应用程序开启定位功能
- 分享Swing学习的一些经验
- Q113:PBRT-V3分别在Linux和Mac下的编译与调试(汇总)
- Q102:光线追踪场景(2)——PLYs(多种模型汇集)
- 问题二十七:ray traing中的positionable camera
- linux sar 历史负载,sar 查看历史负载
- mysql查询未讲课教师_经典教师 学生 成绩sql面试题再次来袭3(附答案)