关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

基础扩展正则表达式

1月25日 不回头投稿
  本文转载自公众号:完美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
  strInput在这个字符串中包含邮件地址,MaryJo。T。Williamson01testtestsite。com。
  strPattern〔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。欢迎分享本文,转载请注明出处。
投诉 评论 转载

光景当岁月的背影慢慢掠过你的眼睛,那曾经的光景就已悄然消逝,但我却在怀念。题记抬头又见樱花,那些白的、粉的,包裹了深褐色的枝干。像是某个公园门口卖的棉花糖。丰盈、干净。……癫痫大发作的处理原则我们都知道癫痫具有发病的突发性和反复性,且癫痫可分为大发作和小发作的,癫痫病患者一旦突然发病如果采取的处理措施不得当是很容易导致患者的生命危险或者是突发其它意外的。所以下面本站……繁荣昌盛造句用繁荣昌盛造句大全181,夷州,一个人稠物穰繁荣昌盛的小城市,现在已经变得赤地千里荒无人烟,入目的只是颓垣败壁。182,竭力使其繁荣昌盛,爱臣民并为臣民所爱,和他们一同生活,政事宽而不严,……老人如何防范骗局近年来,投资理财越来越受到老年人关注。有些老年人觉得去银行存钱太麻烦而且门槛高收益低。同时有一些不法分子也盯上了老人这个群体,他们有退休工人,知识分子,甚至还有一些曾经担任过领……创业失败的个血泪的教训想创业的必看很多人创业失败以后不善于总结自己,总是将失败的原因归结于外在环境,当然这也是无可厚非的,但更多的也要找自身原因。有很多人在创业过程在都只看重想法和执行力中的其一,但其实两……到老造句用到老造句大全【到老dolo】:1。直到老年。2。谓直到最后。1、青春是美丽的风景线,有的人匆匆溜过,一无所获,到老了总是后悔莫及!有的人却欣赏到了那只属于他的精彩,令人神往,到老了总……红包中的亲情人与人之间的爱可以用各种方式来表达。而我与长辈们的亲情是通过红包来表达出来。春节的时候,总有一种感觉让我既兴奋又期待,兴奋的是可以穿上新衣服去放炮,期待的是长辈们在今年的……孕期治牙病防早产不可靠2009年1月29日报道,在怀孕期间治疗牙龈疾病并不是防止早产儿出生的有效方法。患有牙周疾病的孕妇似乎早产的风险更大,这导致有人认为治疗牙齿和牙龈问题可以降低早产的风险。但是一……基础扩展正则表达式本文转载自公众号:完美Excel,作者:fanjy。excelperfect正则表达式(RegEx)是一系列字符,定义搜索模式,用于查找字符串中特定的字符模式。……甜蜜爱情祝福短信1。柔美的月光,轻薄如纱,将盏盏离愁剥下。雪白的盈露,纯净无暇,把片片情愫摹画。在这样清冷安静的夜晚,把你想念,感觉无比幸福。2。夜,清冷微凉,窗,轻搂月光,霜,染白夜帐……难题一天,从邻国来三位商人。这三位商人每人给国王提出了一个难题。可国王和王宫里的所有人都未能答上来。有人提议让阿凡提来回答,国王立刻召来了阿凡提。阿凡提骑着驴径直来到国王面前,抚胸……弗洛伊德自述梦中的抵抗力量我们能否运用现在这种释梦的方法来解释所有的梦?回答是:不可能,根本不可能。不过我们已经用这种方法结识了许多的梦,所以我们相信这种方法是有效的和正确的。你们也许会进一步发问:为什……
青春励志的话简短教师节送给老师说的话关于生活的励志语录关于团队鼓舞士气的话写给好姐妹感动的话集锦从俞敏洪点评牛根生看创业真谛励志电影推荐贫民窟的百万富翁谈钱伤感情的搞笑语录英语励志故事雄鹰鼓励人勤奋刻苦努力学习的句子经典座右铭大全伤感爱情语录100句句句痛在心里
圆脸适合什么长发发型圆脸怎么扎丸子头好看提升兑付效率银行花式解锁零钱理财热闻聚热点网 刚买的新锅怎么处理不粘锅怎么处理刚买的新锅不粘锅我的同学作文汇集学校新风系统怎么安装学校新风系统安装类型介绍详解他才是我心中最闪耀的人作文如何管理手机应用的权限设置爱国的高二作文全身美白小窍门煤油可以带上地铁吗老房子装修的步骤公厕有哪些除臭装置

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州