纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

基础扩展08。VBA正则表达式

7月23日 听雨眠投稿
  本文转载自公众号:完美Excel,作者:fanjy。
  excelperfect
  
  正则表达式(RegEx)是一系列字符,定义搜索模式,用于查找字符串中特定的字符模式。
  
  VBA正则表达式的语法与其他语言(如Python)中使用的语法有较大的区别,主要是因为VBA的RegEx对象带有可选参数,因此有时必须指定这些参数以获得与在其他语言中使用标准的正则表达式语法相同的结果。
  
  VBA正则表达式语法基础
  正则表达式搜索模式是由一个或多个下列元素组成的字符序列:
  文字字符。文字字符只是匹配输入文本中的对应字符,例如搜索模式中的文字字符序列“xyz”将简单地与输入文本中所有出现的“xyz”相匹配。
  元字符。元字符更抽象些,看下面的介绍。
  
  元字符
  元字符是字符或字符组合,在正则表达式模式中具有特殊含义。元字符可以匹配输入文本中的几个不同字符,甚至可以表示字符以外的其他字符。下面是需要熟练掌握的一些元字符。
  
  。
  通配符。未转义的句点匹配任意字符,但新行除外。
  
  “字符串或者行的开头”或“否定”。插入符号在搜索模式中的重要性取决于上下文。1)如果在VBA中将参数MultiLine设置为True,则插入符号表示“行首”,而不是“字符串的开头”。2)如果插入符号放在一个字符类〔〕中,它就像一个否定,即“匹配与字符类的其他参数不匹配的所有字符。”
  
  “字符串的结尾。”搜索模式中美元符号的重要性取决于上下文。如果在VBA中将参数MultiLine设置为True,则美元符号表示“行尾”,而不是“字符串结尾”。
  
  “转义字符。”元字符前面的反斜杠将其转换为文字字符。
  
  “字边界”或“退格字符”。在字符类的外面,匹配文本源中单词之前或之后的位置。在字符类中,表示退格符。
  
  B
  “不是一个字边界。”B是的否定,但在字符类中没有替代含义。
  
  d
  “数字。”匹配从0至9的任意数字。
  
  D
  “非数字。”匹配不是数字的任意字符。
  
  s
  “空白”。匹配空格、换行符或制表符。
  
  S
  “非空白。”匹配不是空格、换行符或制表符的字符。
  
  字符、和称为锚点,因为它们匹配字符之前、之后或之间的位置。
  操作符
  一些元字符改变了如何解释搜索模式中的一个或多个其他元素,例如,它们对这些其他元素执行操作。VBA正则表达式具有三种类型的运算符。
  
  布尔运算“或”
  元字符:
  说明:表示布尔“或”运算符
  示例:ab匹配“a”或“b”
  
  分组
  元字符:()
  说明:括号用于下列目的:1)定义运算符的范围和优先级;2)对字符进行分组并记住文本。
  示例:h(ae)y匹配“hay”或“hey”
  
  量化
  元字符:?
  说明:前一个元素出现0次或1次。
  示例:colou?r匹配“color”和“colour”
  
  元字符:
  说明:前一个元素出现0次或多次。
  示例:abc匹配“ac”、“abc”、“abbc”、“abbbc”,等等
  
  元字符:
  说明:前一个元素出现1次或多次。
  示例:abc匹配“abc”、“abbc”、“abbbc”,等等,但不匹配“ac”
  
  元字符:{n}
  说明:前面的项目恰好匹配n次。
  示例:a{3}匹配“aaa”
  
  元字符:{min,}
  说明:前面的项目匹配min次或更多次。
  示例:a{1,}匹配“a”、“aa”、“aaa”,等等
  
  元字符:{min,max}
  说明:前面的项目匹配至少min次,但不多于max次。
  示例:a{1,3}匹配“a”、“aa”和“aaa”,但不匹配“aaaa”
  
  字符类
  字符类或字符集使用方括号〔〕指定,一些最常见的如下:
  
  〔az〕
  范围从a到z的小写字母集。
  
  〔AZ〕
  范围从A到Z的大写字母集。
  
  〔09〕
  范围从0到9的单个数字集。
  
  字符类经常与搜索模式中的运算符一起使用。例如,〔05〕转换为“找到一个或多个数字”,而不是仅从0到5的单个数字。
  
  VBARegEx函数
  在VBE菜单栏中,选取“工具引用”命令,在“引用”对话框中找到并选取“MicrosoftVBScriptRegularExpressions5。5”复选框,如下图1所示。
  图1
  
  插入一个标准模块并输入下面的代码:
  SubCallRegEx()
  DimrAsMatch
  DimmcolResultsAsMatchCollection
  DimstrInputAsString
  DimstrPatternAsString
  
  strI在这个字符串中包含邮件地址,MaryJo。T。Williamson01testtestsite。。
  strP〔az09。〕〔az〕。〔az〕
  
  SetmcolResultsRegEx(strInput,strPattern,,,True)
  
  IfNotmcolResultsIsNothingThen
  ForEachrInmcolResults
  Debug。Printr
  Nextr
  EndIf
  EndSub
  
  FunctionRegEx(strInputAsString,strPatternAsString,
  OptionalGlobalSearchAsBoolean,OptionalMultiLineAsBoolean,
  OptionalIgnoreCaseAsBoolean)AsMatchCollection
  
  DimmcolResultsAsMatchCollection
  DimobjRegExAsNewRegExp
  
  IfstrPvbNullStringThen
  WithobjRegEx
  。GlobalGlobalSearch
  。MultiLineMultiLine
  。IgnoreCaseIgnoreCase
  。PatternstrPattern
  EndWith
  
  IfobjRegEx。Test(strInput)Then
  SetmcolResultsobjRegEx。Execute(strInput)
  SetRegExmcolResults
  EndIf
  EndIf
  EndFunction
  
  CallRegEx过程将调用自定义的RegEx函数。在CallRegEx过程中,在变量strInput中指定输入文本,在变量strPattern中定义了搜索模式。代码中,输入文本包含一个假定电子邮件地址的字符串,其中包含有效电子邮件地址中允许的所有字符类型(允许号)。无论在输入文本中如何重新排列该电子邮件地址,自定义函数RegEx都会找到它并将其返回,前提条件是,你要传递正确的参数。
  在RegEx函数中前两个参数是刚才讨论的输入字符串和搜索模式变量,这些参数是必需的,而接下来的三个参数可选:
  参数Global,布尔型。如果设置为True,返回所有的匹配。如果设置为False,仅返回第一个匹配。默认值为False。
  参数lgnoreCase,布尔型。如果设置为True,匹配模式不区分大小写。默认值为False,即区分大小写。
  参数MultiLine,布尔型。如果设置为True,则会改变搜索模式中(“字符串开头”)和(“字符串结尾”)元字符的解析,以便它们匹配行的开头和结尾。默认值为False。
  
  在CallRegEx过程中,设置参数GlobalSearch为False,但是如果我们将其设置为True并且在输入文本中有多个电子邮件地址,那么它们将全部返回到匹配集合中。可选参数IgnoreCase设置为True,否则搜索模式会变长:
  〔azAZ09。〕〔azAZ〕。〔azAZ〕
  
  上面模式中括号内的项目表示字符集,后面跟着的加号是量词,用于指定要查找字符的数量。中间的“”字符表示搜索该字符,两对双括号中的点被反斜杠转义,表示搜索文本中的点。
  
  从左至右阅读上述模式,其表达的意思如下:
  查找一个或者多个从a到z的小写字母或大写字母、从0到9的数字、连字符()、点(。)、加号()或下划线()
  并查找
  “”符号
  并查找
  一个或者多个从a到z的小写字母或大写字母,或连字符()
  并查找
  “。”号
  并查找
  一个或者多个从a到z的小写字母或大写字母
  
  如果满足所有条件并且输入的字符串中的所有匹配字符是连续的且顺序正确,那么RegEx函数将返回匹配的结果。这意味着,如果搜索模式中含有空白字符,将从根本上改变其意义。如果你错误地在搜索模式中包含了空白字符,那么RexEx将在你指定的其他字符中查找空格。
  
  小结
  正则表达式常用于“查找和替换”,其中替换功能使用RegEx对象的Replace方法。你可以使用VBA正则表达式进行各种高级文本处理,包括:
  查找
  查找和替换
  验证用户输入。例如,你可以使用RegEx函数验证密码或电子邮件地址。
  查找和删除重复的词语。大多数文本处理软件,如MSWord,可以查找出现的重复词语,但如果手动删除重复词语则太费时间,而RegEx函数就能够解决。
  本地化。如果你需要将文本翻译另一种语言,两种语言的日期和数字格式可能会有所不同,例如,如果输入文本包含数千个数字,那么编写RegEx算法将是非常有用的,而不是手动编辑。
  
  虽然RegEx有很多非常好的应用场合,但是也有一些不应该使用的情形:
  现有功能已经能够完成的工作。VBARegEx非常强大,因为它允许你从输入文本中精确提取所需要的信息,但是如果Excel函数和运算符,例如Like、Find或Replace,可以完成这些工作,那就无需再使用RegEx了。
  在使用RegEx解析html之前请多考虑一下。确实,如果足够幸运,可以得到你想要的结果,但大多数情况下都可能得到一些无法正确修复的奇怪错误。如果发生这种情况,唯一可靠的解决方案是弃用RegEx,重构代码。
  
  本文学习整理自wellsr。com。欢迎分享本文,转载请注明出处。
投诉 评论 转载

黑客原来只要三招就能轻松入侵你的电脑还不。。。在前段时间勒索病毒肆虐的情况下,小编相信很多人都受到了惊吓(包括我)原来电脑这么容易就能中毒!而且是在你神不知鬼不觉没有下载任何不安全的软件的前提下,都能被莫名其妙地“中招”,……网吧电脑配置那么低,为什么不卡呢?安全软件家里的电脑安全软件总得有一个吧,什么360腾讯管家金山管家的,这些东西在保护我们电脑安全的同时,也会占用一部分的速度,毕竟本质上他也是一个软件,也需要分出一部分内……基础扩展08。VBA正则表达式本文转载自公众号:完美Excel,作者:fanjy。正则表达式(RegEx)是一系列字符,定义搜索模式,用于查找字符串中特定……【实战】如何亲手搭建一个分布式IM(即时通。。。目录结构:本文较长,高能预警;带好瓜子板凳。于是在之前的基础上我完善了一些内容,先来看看这个项目的介绍吧:CIM(CROSSIM)一款面向开发者的IM(即时通……零基础搭建网站步骤现在互联网处于高速发展期,个人建立网站已不是什么难事,本篇文章为大家介绍一下个人搭建网站的一些步骤。注册域名域名通常理解为你网站的地址,好的域名容易让人记住。现在有……一根OTG数据线,手机秒变电脑,让你轻松读取。。。一根OTG数据线,手机秒变电脑,让你轻松读取U盘文件公转USB3。0母OTG线正反面一致的设计,轻松解决插不准的问题,让你正反面随便插。用手机连接其他USB设备,一……据说90账户都易被盗!1分钟教会你设置黑客。。。随着我们注册的账户越来越多,我们使用的密码也越来越多,微博、邮箱、QQ、微信各种账号密码几乎要乱成一锅粥了。而更加雪上加霜的是,由于大部分人为了密码方便好记,往往直接使用自己的……一位10年经验的底层开发程序员教你如何入门“师傅领进门,修行在个人”。Github上一位拥有10年底层开发经验的老程序员gurugio,整理了一套适合嵌入式或底层开发(LowLevelProgramming)的程序员入……手机输入法哪个最好用手机输入法哪个最好用?手机教授2016111410:43欢迎转载,请注明出处,抄袭必究!你有用过语音输入法吗?当打字不方便而对方也不方便听语音时,采用语音输入……教你如何免费下载网上收费的音乐和视频墨海雪浪编辑一般在线播放的音频或者视频都会以缓存形式保存在Internet临时文件夹,早在几年前很多人都知道只要找到Internet临时文件夹就可以下载较早前播放过的视频……教你一招看视频没有广告怎么屏蔽视频广告,网页广告怎么去除?相信在这个网络发达的时代,很多人都喜欢用电脑看视频吧。想看什么直……怎么下载视频?(优酷、酷6、56网、土豆、搜。。。在文章中插入视频:撰写或修改文章内容时,在编辑器内点击“插入flash”的按钮后,会弹出“插入flash”的网页对话框,在“Flash的url地址”一栏粘贴视频的链接地址……
如何排除常见家庭网络故障优质的网站需要做到哪几点?电脑提示d3dcompiler43。dll文件丢失如何找回装系统再也不花钱了,电脑小白如何制作计算。。。零基础学电脑从入门到精通(1)电脑零距。。。一根网线就可以非常简单方便的让两台笔记本。。。如何将电脑设置成网络硬盘?超级简单易学,电脑系统安装教程!不重装系统重新硬盘分区或者扩大C盘的方法神奇手机输入这三个数字,wifi速度瞬间倍。。。手机破解WIFI密码图文教程,哪里wifi有密码。。。两步教你用U盘做电脑系统,做系统再也不求人。。。

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形