ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: liu-aguang

[原创] 正则表达式入门与提高---VBA平台的正则学习参考资料

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-6-12 13:36 | 显示全部楼层
本帖已被收录到知识树中,索引项:文本处理和正则
赶上直播了?  楼主   还有更新么?  楼主好人哇!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-12 14:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  六、环视的多角度理解与应用
   
    环视按引擎往前()看还是往后(),分为顺序环视和逆序环视.VBscript正则只支持往前看的顺序环视.环视有多种叫法,零长度断言.
对肯定顺序环视(?=exp)来说:从位置的角度理解,表示该位置是子表式exp左面紧挨的位置;断言的角度理解,它断言自身出现的右边能匹配文本exp.
    否定环视则是相反的情况.
    从匹配过程来理解,顺序环视是从左至右查看文本,尝试匹配exp,如果能够匹配,那么肯定顺序环视(?=exp)报告成功,而否定顺序环视(?!exp)报告失败.反之,如果不能够匹配,那么肯定顺序环视报告失败,而否定顺序环视报告成功.
    从环视的应用来说,主要有两个方面:

(一)用作锁定特定位置的文本字符串
    例1:将文本中的”windows98,windows97,windowsxp”中的字符串”windows”替换为”win”
   正则:
    Windows(?=98|97|xp)
   这个正则表达式锁定了字串”windows”: 在目标文本中,只有字符串”98””97””xp”前面的”wordows”才会得到匹配.它排除了在其它位置上存在的”windows”字符串.
    例2:查找后面不跟着某个特定单词(Cat)的任意单词
    正则:
    \b\w+\b(?!\W+cat\b)
    这个正则表达式首先用”\b\w+\b”去匹配一个单词,如匹配成功,紧接着尝试表达式(?!\W+cat\b),它的意思是查找该位置之后有无这样的字符串:若干个非单词字符(如空格)后跟着单词”cat”.
    如果没有,则环视部分报告匹配成功,于是整个正则表达式匹配尝试结束,最终成功匹配,匹配结果为第一部分找到的单词.
    反之,如果有,则环视部分报告匹配失败,于是整个正则表达式匹配失败,最终结果是,第一部分找到的单词不是符合要求的.
    要注意的是在环视的子表达式中,Cat后用了单词边界\b,是避免把某一个单词内部的cat字符当成单词了.
   例3:查找不重复的单词
   正则:
    \b(\w+)\b(?!.*?\b\1\b)
   前面我们介绍过查找相邻重复单词的正则表达式:
   \b(\w+)\s+\1\b
   你能否写一个查找相邻或不相邻的重复单词的正则表达式呢?

(二)用作对特定字符串是否存在的判断
   例1:搜索同时包含多个单词的文本行,:搜索包含单词onetwo的文本行
   正则:
   ^(?=.*?\bone\b)(?=.*?\bwo\b).+$
   例2:查找除某个单词(cat)之外的任意单词
   \b(?!cat\b)\w+
   例3:查找不包含另一个单词(cat)的单词
   \b((?!cat)\w)+\b
   例4:匹配不包含某个单词(cat)的整行
   ^((?!\bcat\b).)*$
   请自己仔细解读这几个可在实际工作应用的经典正则表达式.
   小结:与锁定文本功能不同,用作判断时,环视结构是放在前面的,匹配尝试时,它将在指定位置判断是否存在特定的字符串(即尝试匹配环视结构内的子表达式),如果环视报告成功则继续下一字符的匹配尝试;如果环视报告失败,则宣布整个匹配过程失败.
   例1中指定位置是从行开始位置尝试子表达式的匹配;
   例2中是从每个单词边界尝试子表达式的匹配;
   例3和例4是在单词内部或行内部的每个位置尝试匹配子表达式,所以效率较低.另外,如果不需要提取文本,3和例4中的捕获括号可修改为非捕获性括号.

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-6-12 15:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-6-12 15:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个要收藏一下,正是因为正则的存在,目前我解决了公司一大word特定字符提取的难题,大大提高效率,以前统计一个工程的量可能需要很久到几天甚至会不准确,现在只需要以分钟或者小时计算,并且全程程序搞定,省去人为操作

TA的精华主题

TA的得分主题

发表于 2014-6-12 15:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
留下脚印,空了学习

TA的精华主题

TA的得分主题

发表于 2014-6-12 16:20 | 显示全部楼层
带劲儿 发表于 2014-6-12 15:35
这个要收藏一下,正是因为正则的存在,目前我解决了公司一大word特定字符提取的难题,大大提高效率,以前统 ...

使用Word而不是Excel做原始数据表……是这么回事么?

TA的精华主题

TA的得分主题

发表于 2014-6-12 17:02 | 显示全部楼层
香川群子 发表于 2014-6-12 16:20
使用Word而不是Excel做原始数据表……是这么回事么?

是这样的,我们干的其中一个活儿是对型材进行套裁下料让车间工人进行切割,原始的这个套裁的数据是以Word的形式出现的,公司俗称就是以Word形式来表达这个不好改了已成定局,并且有其自己的格式,统计的时候不像excel那样,这些数据唯一一点就是有固定的格式以及固定的字符串,一开始我是想用正则解决这个问题,所以就学习了正则...只是会了一些皮草而已

TA的精华主题

TA的得分主题

发表于 2014-6-14 09:21 | 显示全部楼层
本帖最后由 guojianlin1985 于 2014-6-19 17:12 编辑

为方便看官们阅读,做了个word版,水平有限,错误之处还望指教。

正则表达式入门与提高.zip (415.49 KB, 下载次数: 1385)






更新的附件到71楼下载



应楼主要求,重新制作了word文档 ,附件在72楼

点评

直播还在继续……  发表于 2014-6-16 15:56

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-6-14 10:26 | 显示全部楼层
guojianlin1985 发表于 2014-6-14 09:21
为方便看官们阅读,做了个word版,水平有限,错误之处还望指教。

好激情,也好热心,赞一个。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-14 10:43 | 显示全部楼层
本帖最后由 liu-aguang 于 2014-6-14 21:15 编辑

第三篇 正则匹配的工作原理

一、匹配的基本术语

      1.    匹配
    一个正则表达式能匹配一个字符串,其实是指这个正则表达式能在字符串中找到匹配文本.
     2.    正则引擎
    引擎本来是指发动机的核心部分, 现也用作IT方面的术语,指经包装过的函数库,方便别人调用,如搜索引擎、图形引擎等。
    一个正则表达式不仅仅是一个代码模式,更是用正则符号写出的程序.当我们把它赋值给正则对象的属性时,其内部进行了所谓的编译”,即对正则表达式进行语法分析,建立一个语法分析树,根据这个树生成一个正则引擎.
    正则引擎有DFANFA类型之分,VBscript中使用的是传统NFA引擎.这种引擎是所谓的非确定有穷自动机(NFA)”计算机算法的实现.本文接下来讨论的是NFA引擎的工作原理.(这是大多数语言平台上的选择,较流行的MySQL,使用的是DFA
    这是不是让人觉得模糊和深奥,本人也以为是.不过没关系,现在你只需要知道,在正则匹配的过程有一个东东操控匹配形为,它就是引擎”.而且我们也不打算从匹配算法理论角度去解读原理,而是从运用的角度去考察匹配的各种形为.
    尽管如此,你应该从正则引擎的形成过程,明白一个事实:引擎受制于你编写的正则表达式.合理的正则表达式可以让引擎马力十足,而有问题的正则表达式则可能让引擎慢如蜗牛,更甚者,可能导致引擎空转或熄火.
    换一种法,就是匹配是否成功或效率高低都掌握在你手里,这也是我们要研究原理的意义.
    3.    引擎中的目标文本位置和字符
   对于一段目标文本,在引擎眼中,它是没有单词/句子/段落/等等复杂概念意义的,它看到的只是位置字符”:
    捕获.PNG
  4.    子表达式
  在表述过程中,时常出现子表达式叫法.子表达式是整个正则表达式的一部分.:括号中的内容,或由”|”分隔的多选分支,或环视内的表达式等.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 15:55 , Processed in 0.046505 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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