ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

【菠萝一号】【文字处理教程】《正则表达式轻松入门》

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-21 05:17 | 显示全部楼层
本帖已被收录到知识树中,索引项:其他编程应用
深入理解规则
================
通过前面的两个实例,我们应该大至明白了正则表达式的工作方式,它可以 通过一组特殊的描述符号来描述文字的组合规则。有心的读者,可能会发现,从教程的一开始,我就一直强调 规则 两个字之所以这么不厌其烦的多次强调 规则,那是因为。能不能字符串的组合规则,是编写正则表达式的核心要求。
大家试试能不能描述出下面这些实例中所包含的规则,并仔细分析 红色文字 部分,看看使用那种规则描述,可以使 红色文字 和其它部分区分开来。:
【测试 1】
---------------------------------
4306 - 02125812547123
430 - 509072068704706
43068 - 7004954870680

这段文本是由3行文字组成,每行文字都是以43开头,每行文本的中间,都包含了一个“短横杠”。红色文字 标识出了所有阿拉伯数字 7

360反馈意见截图1648030969106112.png

【测试 2】
---------------------------------
Please send this message to those people who mean something to you,to those who have touched your life in one way or another

该段文字是由 英文字母 和 英文逗号,以及空格 组成。红色部分 的文字都是由 字母t字母o 组成的字符串,字母 t 必需位于 字母 o 前面。

360反馈意见截图16241231636970.png

【测试 3】
---------------------------------
China was founded on October 1, 1949.

该段文字是由 英文字母 和 英文逗号,以及空格 和 数字组成。
红色部分 标识的是句子中所有的数字部分。
红色部分 只拥有数字 1、9、4 这三个数字。



大家注意,红色部分 的这二组规则,都可以与句子其它部分区分开来。这里向大家展示了正则表达式的一个很重要的特性,规则的多义性 同样一串文字,包含的规则经常不止一种,也就是说我们可以使用 多条正则表达式 描述不同的规则  匹配相同的一段文字。下面我将根据这两条规则,分别写出三条正则表达式进行演示。大家可以发现它们将会得到相同的匹配结果。


第一条正则表达式:使用 \d 匹配句中所有的 单个数字
360反馈意见截图1674120896105105.png


第二条正则表达式:使用 1|9|4 匹配句中 1,9,4 这3个数字
360反馈意见截图16540604314934.png

除了 上面这二种方式外,我们还可以使用 [194] [^a-zA-Z\,]  来进行匹配,大家可以自己试一下。在后面的课程中,我将会详细介绍这些语法。




总结

当我们需要使用正则表达式匹配某些字符串时,首先需要分析这些字符串的规则是什么,只有找到了正确的规则,我们才能写出正确的 正则表达式。对于同一组文字,经常包含多种组合规则,这时大家应当根据情况去选择,基本原则是优先考虑以下几点:易于写书,匹配精确度高,运行效率高。但这并不是强制要求。规则是死的,人是活的。一切是以高效率的解决问题为前提。比如提取一段文本中的身份证号,这段文本中除了身份证号,在没有其它数字了。那么,我们只要匹配数字就行了,没有必要把表达式写得更复杂。好了,题外话就说到这里。see you next time!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-21 16:10 | 显示全部楼层
本帖最后由 c001q 于 2017-6-21 18:28 编辑

正则表达式,如何描述要匹配的字符
========================================================


要描述字符的组合规则,第一步我们需要确定,要匹配的字符是哪些,换句话说就是字符的取值范围,比如,查找的是数字还是字母,大写字母还是小写字母,是所有的26个字母,还是只需要abc这三个字符,等等。在字符确定下来后,我们才有可能接着去考虑,这些字符出现的次数,字符与字符之间的先后顺序等内容。

直接匹配文字
使用正则表达式时,最简单的匹配规则是,你需要什么字符,正则表达式中就输入什么字符。比如,我需要从下面这段文本中,查找所有的小写字母 a 。那么正则表达式就直接使用 a 就可以了。
360反馈意见截图16630511111145144.png



练习

=========

  • 在网络上找一个英文段落,并使用正则表达式查找段落中的所有的英文字母 "g"。(提示,可以使用正则表达式测试工具进行练习,工具下载: https://pan.baidu.com/s/1nuZm65V



正则表达式的灵魂:元字符

所谓“元字符” 是被正则表达式引擎进行特定解释的字符。例如,在正则表达式框中,如果我们输入 “d" 那么,那正则表达式只会匹配 d 这一个字符,但如果在 d 的前面加上 斜杠变成 "\d",那么匹配的内容就完全不一样的。\d  在正则表达式中,被解释为匹配 从 0 到 9 这10个阿拉伯数字。见下图:


使用正则表达式【d】匹配字母 d

360反馈意见截图165712299812799.png


使用正则表达式 【\d】 匹配句子中的 6个数字,它们分别是:1 0 0 5 8 7

360反馈意见截图16470416336024.png


类似 \d 这种会被正则表达式进行特殊解释的字符,都称为 【元字符】。【元字符】是正则表达式灵魂,正这【元字符】让正则表达式拥有了强大能力,可以描述任意 ”文字组合规则“。

这里大家需要注意一点,有些元字符并不被所有的 正则表达式引擎 支持。而且在不同的 正则表达式引擎下 ,同样的一条表达式,也可能会得到不同的结果。这点需要大家在平时使用的时候,多加留意。这里推荐一书关于正则表达式的书《精通正则表达式 第三版》里面对不同的正则表达式引擎都有介绍。

匹配不显示符号

“不显示的符号还需要匹配?”  我相信有很多朋友,心中都会有这样的疑问。但实际应用中,经常有需要匹配不显示符号的情况。我们先来看看什么是不显示符号。

计算机字符中除了可以从屏幕上看到的字符以外,还有部分符号是不可以看到的。这样的符号包括了,换行符、回车符、制表符号(Tab)、单词边界符号、行首符号、行尾符号。是不是有点晕,没关系我们一个个的来解释。









TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-21 18:26 | 显示全部楼层
首先看看 换行符 回车符 下面关于这段文字描来源于网络,清楚的描述了这两个符号来历和区别。


--------------------------------------------------------------


在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。


后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“ <回车><换 行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号


----------------------------------------------------------------------------

在Windows操作系统中,每当我们按下回车键,系统就会自动生成这两个符号。这两个符号,在下图中,统一表示为 “回车符号”,虽然图中只显示了一个符号,但它实际上两个符号。
360反馈意见截图16570209466549.png
在正则表达式中,为了标识这个回车符号就必需同时使用 \r\n \r 表示的是换行符  \n 表示的是回车符。下面我们根据其体的实例中,看看它们有什么用处。


















TA的精华主题

TA的得分主题

发表于 2017-6-21 19:59 | 显示全部楼层
LMY123 发表于 2017-6-19 11:00
谢谢楼主的再次分享,期待每日一贴发

http://club.excelhome.net/thread-1352770-1-1.html
我也分享了一些正则实例,有兴趣可以看一下。

TA的精华主题

TA的得分主题

发表于 2017-6-22 06:49 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-6-22 09:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-6-22 11:52 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-22 12:06 | 显示全部楼层
虽然我说是的,Windows 必需同时使用 换行符(\r)回车符(\n) 来匹配段落的结束,但是实际情况是,在不同的应用程序中有可能需要使用了不同的方式来匹配段落结束,因为不同的正则表达式引擎算法会不一样。这是一个很容易让人们迷惑的地方。下面我将在二个不同的程序,使用正则表达式匹配同样的内容,大家可以看到,它们之间区别是如此大。
测试中,我们将在两行字符中,使用 正则表达式 找出第一行行尾的 f 和第二行行首的 o

dfs.gif

在程序 UltraEdit 中使用正则表达式,是符合我们预期的,匹配过程中需要同时匹配 换行符 \r 回车符 \n 。完整的表达式为:f\r\no

dfs123.gif

在程序 RegEx Tester 中,就有有所不同,匹配过程中,我们不需要使用 换行符 \r 只需要使用 回车符 \n 。完整的表达式为:f\no


360反馈意见截图1660090192140115.png

在程序 EmEditor 中,以上两种正则表达式都可以使用。

使用正则表达式: f\no

360反馈意见截图16571228476745.png

使用正则表达式:f\r\no

360反馈意见截图16400302398564.png

我们来比较这二个不同的表示式:

霏霏dfdfdf.png

是不是有点意思!我们学了这么久的正则表达式,才发现正则表达式还存在这样的陷阱。软件不同,匹配效果就不一样。其实的类似的问题,还存在于元字符 英语句号【.】中,详细情况大伙将会在后面的课程中看到。

通过学习,应该意识到,在计算机的文本中,有些东西不会显示并不代表不存在,上面的实例很好的说明了这个问题,如果我们不在 f 和 o 之间 匹配段落结束符号 \r\n,那么是无法成功找到 位于不同段位 中的 r o 这个两个字符的。

练习:
--------------------------
请读者,尝试在 RegEx Tester  正则表达式测试工具中(下载地址:https://pan.baidu.com/s/1nuZm65V),正则表达式不使用 \n,只使用 fo ,是否能匹配到下面样本中的红字部分。


kjsldf
ooeriu


TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-23 10:14 | 显示全部楼层
本帖最后由 c001q 于 2017-6-23 10:18 编辑

匹配制表符 \t
==========================
制表符,就是通过 PC 键盘上的 Tab 键所生成的空白区域。

e61190ef76c6a7ef8cbeda10fefaaf51f3de666f.jpg
Tab 是一个可以进行列对齐的符号。例如:

Public Sub Init(url, cookie)
    Set mHtmlDoc = GetDoc(url, cookie)
    mCookie = cookie
    GetPagesCount
End Sub


大家一定要注意 Tab键产生空白区域,与 键盘上的空格键产生的空白区域,是完全不相同的。见下面两个实例,它们分别匹配了空格和制表符。
无标题.jpg



360反馈意见截图16421029355640.png



练习
==============
在记事本中,任意输入5行文字,在每行文字中插入一个或多个 Tab 符号(按下Tab键)。并将内容复制到 RegEx Tester 中,然后使用正则表达式的元字符 \t 进行匹配。

123123.gif





TA的精华主题

TA的得分主题

发表于 2017-6-23 10:28 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢楼主的分享
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-7 03:03 , Processed in 0.048159 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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