ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-6-17 23:44 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:其他编程应用
本帖最后由 c001q 于 2017-6-18 09:35 编辑

正则表式是什么?
=================
简单来说,正则表达式,就是一种可以 描述文字规则 的特殊字符。例如,我们有一个文本文件,文件中包含以下文字:
小张的身份证号是 430505151515201414 ,他是长沙人,长沙的邮编是 410000
小红的身份证号是 430108473289541876 ,她是北京人,北京的邮编是 100000
东东的身份证号是 498721489635478321 ,她是上海人,上海的邮编是 200000

如果我们需要提取上面文本中的 身份证号,通过观察可以知道,身份证号 是由 18个数字 组成,因此我们可以使用正则表达式 \d{18} 来表示。同理 邮编 是由 6个数字 组成,那该用什么来表示呢?自然是使用 \d{6} 来表示。










TA的精华主题

TA的得分主题

发表于 2017-6-18 11:07 来自手机 | 显示全部楼层
谢谢楼主分享,期待继续

TA的精华主题

TA的得分主题

发表于 2017-6-18 13:49 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-18 15:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 c001q 于 2017-6-18 15:38 编辑

正如上面实例中所展示的那样,正则表达式描述的是一种字符的组合规则。只要有规则可寻的字符串,我们就可以使用正则表达式来进行提取。下面,我们将通过更多的实例,使初次接触正则表达式的新人,对它的用法有个直观的认识。实例都来自于 本论坛网友的提问:

实例一:提取下面文本电话号码

山东省东营市广饶县经济开发区8号路北侧,271200,赵振, 13455382514
江苏省常州市武进区前黄工业区,陈总 ,13506119985
山东省莱芜市钢城区 里辛街道 里新镇高家岭小区,271100,李文, 13455491105
广东省揭阳市普宁市 流沙东街道 新坛星际俱乐部旁 立丰药业后面 475之1 (送达时联系本人手机),陈天天,1800-7643438 13112151916
山东省枣庄市滕州市 龙泉街道 春秋阁小区19号楼一单元,277500,哈拉破瓦, 15589217737

要提取上面这段文字中的电话号,十分简单,这段文本中,只要 数字长度大于10位的,我们都可以认定为电话号码。因此我们可以使用 正则表达式 \d{10, }来表示。

{}表示数量有四种书写形式,分别是:

\d{1,5}  1-5 个数字组成的字符串
\d{3,}  3 个以及3个以上数字组成的字符串
\d{,5}  0 - 5 个数字组成的字符串
\d{6}  6个数字组成的字符串










评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-18 15:32 | 显示全部楼层
jiminyanyan 发表于 2017-6-18 13:49
这说法不准确,身份证号码中有字母的情况…………

做为入门教程,描述的内容要简单,不能把有些东西描述的过于详细。做为初学者,要尽量少考虑这些问题。我们的主要目的掌握正则表达式的语法。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-6-18 15:42 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主继续,打算跟贴学习正则表达式,先谢谢了

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-18 22:36 | 显示全部楼层

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

实例2:查找下面文本中所有以小写a开头的单词
=================
There are moments in life when you miss someone so much that you just want to pick them from your dreams and hug them for real! Dream what you want to dream;go where you want to go;be what you want to be,because you have only one life and one chance to do all the things you want to do.

为了提取文本中 以小写a开头的单词 我们需要考虑这么2个问题:
问题1:怎么识别文本中的单词
问题2:怎么识别以 小写a 开头的单词

为了识别单词,正则表达式中提供了元字符  \b  \b  是单词的分界符。由于单词都是 以空格进行分割 的,实际上\b 表示就是的空格和字母之间的位置。见下图:


360反馈意见截图16380519535963.png




this is a apple!这句话中,This 中有个 is ,另外还有个单词 is ( this is a apple)为了匹配单词 is 。就需要使用 \bis\b ,如果不使用\b 就会匹配两个 is(包括了This 这个单词中的 is):


使用了 \b 的正则表达式

360反馈意见截图163608027611182.png

没有使用 \b 的正则表达式

360反馈意见截图16280728707547.png

(注:此软件的下载地址为  http://pan.baidu.com/s/1nuZm65V






评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-6-19 11:00 来自手机 | 显示全部楼层
c001q 发表于 2017-6-18 22:36
实例2:查找下面文本中所有以小写a开头的单词
=================
There are moments in life when you mi ...

谢谢楼主的再次分享,期待每日一贴发

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-19 17:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 c001q 于 2017-6-19 17:06 编辑

当我们知道了 使用 \b 可以匹配单词边界(字母和空格之间的位置)后,下个问题是 如何匹配以a字母开头的单词,我们先来看看正确的表达式应该怎样写的。
360反馈意见截图164309267011768.png

图中显示,图中我们使用的正则表达式为:\ba\w*\b 。它正确的匹配到了4个以 小写a开头的单词(见红框部分)。我们第一眼看到这个表达式,会感觉它很乱,但它实际上是由4个部分组成。见下图:
无标题.png
这个表达式中,新出现了一个 \w*  ,\w 表示的是[a-z] 这26个字母中的任意一个字母。星号 * 表示 将 前面的 \w 重复零次或多次。是不是有点难理解,没关系,接着往下看。


我们知道,在英语有许许多多,以a 开头的单词,这些单词,除了第一个字母是a 以外,后面跟了多少个字母,我们根本无法确认。有可能,a 后面有2个字母,如 abs,也有可能有8个字母,如 albatross。也有可能在 a 的后面没有任何的字母,如不定冠词 a。因此,为了描述的方便,在正则表达式中我们就将这种 无法确认个数 的情况,统一用 * 来表示。这种表示数量的符号类似的还有 ?+,以及实例1中介绍的的 {1,3} 这种形式。它们之间存在等效的关系。


* 等效于 {0,}    a\w{0,} a\w* 匹配以 a开头的单词,a的后面可以没有任何字母,也可以有任意多个小写英文字母。
? 等效于{0,1}    a\w{0,1}a\w? 匹配以a开头的单词,a的后面,可以没有任何字母,也可有拥有1个字母。也就是说匹配的内容长度,不能超过2个字母,可以匹配 ab、ac、ad,但不能匹配,abc,adddd,adetfg,
+ 等效于 {1,}    a\w{1,} a\w+ 匹配以a开头的单词,a的后面,至少 要有一个字母。



看完了上面的内容后,不知道大家是否理解了 \ba\w*\b  这个表达式的意思了呢?如有不明白的地方欢迎留言。

使用 \w* 的原因在于,我们并不关心文本中以 a 开头的单词的长度。只要它是一个单词,并且以 a 开头,那么这个字符串就是我们所需要的。






评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-6-20 22:36 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢楼主,继续哈,不要太监,这样好理解了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 06:33 , Processed in 0.044616 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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