Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 24839|回复: 7

[已解决]正则表达式execute方法的问题。

[复制链接]
发表于 2013-12-12 22:10 | 显示全部楼层 |阅读模式
本帖最后由 silenthunter 于 2013-12-12 22:11 编辑

Public Function 提取邮箱(email As Range)
Dim Regex As Object
Set Regex = CreateObject("VBSCRIPT.REGEXP")
Regex.Pattern = "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
Regex.Global = True
Set matches = Regex.Execute(email)
For Each Match In matches
   提取邮箱 = Match.Value
Next
End Function


第1个问题:书中说Execute按照表达式对内容进行搜索,产生一维数组,所有符合条件的内容分为一个个元素存进数组,但从单步执行来看,matches变量的类型是object,看起来不像普通的数组的样子。那么它到底是不是一个真的数组?
q1.jpg


第2个问题:就算matches产生的是一维数组,那么为了得到每个元素就必须用for each遍历。如果早就知道数组只包含一个数,那么遍历就十分浪费表情,但是正则似乎只能用遍历法来得到这个元素?


最佳答案
2013-12-12 22:43
那就直接取第一个的。
matches(0).value呢。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-12 22:29 | 显示全部楼层
matches产生的是集合吧。
如果用了分段,那就取submatches里的元素。


回复

使用道具 举报

发表于 2013-12-12 22:32 | 显示全部楼层
For Each Match In matches
   提取邮箱 = Match.Value
Next
你这里这样遍历意义不大,这是返回了最后一个值而已。
回复

使用道具 举报

 楼主| 发表于 2013-12-12 22:36 | 显示全部楼层
hwc2ycy 发表于 2013-12-12 22:32
For Each Match In matches
   提取邮箱 = Match.Value
Next

意义不大,所以我想找个方法不要遍历。少打几行代码都行啊。
回复

使用道具 举报

发表于 2013-12-12 22:43 | 显示全部楼层    本楼为最佳答案   
那就直接取第一个的。
matches(0).value呢。
回复

使用道具 举报

 楼主| 发表于 2013-12-12 23:12 | 显示全部楼层
hwc2ycy 发表于 2013-12-12 22:29
matches产生的是集合吧。
如果用了分段,那就取submatches里的元素。

自学vba一年了,基本的都学过,单元格引用、多数语句、工作表常用的几个对象、自定义函数、数组、窗体、正则、字典、操作注册表、FSO。这些都涉及到了,只是不熟练。不知这些知识与集合有没有关系?


回复

使用道具 举报

发表于 2013-12-12 23:23 | 显示全部楼层
silenthunter 发表于 2013-12-12 23:12
自学vba一年了,基本的都学过,单元格引用、多数语句、工作表常用的几个对象、自定义函数、数组、窗体、正 ...

你去用就清楚了,matches的类型是matchcolleage吧,好像,这就是集合了。


回复

使用道具 举报

发表于 2019-2-20 11:34 | 显示全部楼层
朋友我也遇到了这个疑问,你解决没呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-17 05:12 , Processed in 0.322082 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表