如何简单理解正则表达式?只需1分钟就可以看到她优美的舞姿_正则表达式

Hi,大家好,本章节开始将会从零开始和大家用图文的方式,让你从零基础学会正则表达式!有兴趣的小伙伴可以持续关注我,或者在专栏中进行查看自我学习,愿与君携手前行!


本文将要说到的正则表达式?可能初学的你,一脸疑问?究竟何为正则,正则表达式,(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学语言的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言(delphi、Scala、PHP、C#、Java、C++、Objective-c、Swift、VB、Javascript、Ruby以及Python)都支持利用正则表达式进行字符串操作。说的简单明了一点,正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。


文本处理是我们在日常工作中一项常见的工作任务,比如:在一段文本或数据中,查找、替换、提取、验证、分离和删除等特定字符或字符串。这个工作内容在几乎所有文本编辑器中(如word/excel/VBE等)都提供了字符串的查找/替换功能;在编程语言的世界里则更是提供了更为丰富的字符处理函数和方法。众所周知在VBA中有Find(查找某字符串)、Replace(用一字符串去替换文本中的另一字符串)、LIke(判断某字符串是否存在)、Split(拆分字符串)等等。


不过这些普通的函数或方法也存在很大缺陷:它们通常都是对非常具体的字面文字进行操作,假如要处理某一类具有某些相似特征的字符或字符串,就显得力不从心了。举个简单的例子,要求在一大段文本中,查找所有的符合规范的电话号码。如果用VBA本身提供的字符处理函数来处理,显然不是一件非常容易处理的事情。由此可见,在实际的工作中对稍微复杂一点的文本的处理,如果仅仅只靠编程语言本身是不够的。因此,一种功能更为强大的文本处理解决方案----正则表达式方案,他就出现在我们的眼帘啦!


正则表达式是强大、便捷、高效的文本处理工具。利用它使用者可以描述和分析任何复杂的文本,配合编程语言或文本编辑器提供的支持,正则表达式能够查找、替换、提取、验证、添加、删除、分离和修整各种类型的文本和数据。当今主流编程语言几乎都提供了对正则表达式的支持;有些文本编辑器(如Dreamweaver)在编辑查找框中也可直接输入正则表达式,实现不限于字面文字的搜索与替换.VBA虽然只是对正则提供简单支持,但是它也可以完成一些用VBA函数或方法难以处理的文本处理任务。正则表达式,可以总结为一句话,她是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。


那么我们使用正则表达式它可以完成哪些方面的工作?其实他主要的工作效能是给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)和通过正则表达式,从字符串中获取我们想要的特定部分。

现在和大家谈谈正则表达式如何处理文本的简单思路,如下:

1、在处理文本操作的时候,通常是在目标文本中找出特定的字符串,而要查找它们必须得描述出该字符串的特征。比如,你要验证自己输入的是否是一个正确的电话号码,肯定不可能去把所有存在的电话都找出来,因而首先得依据电话号码规范,建立一个电话号码的数据模型,然后比照该模型到需要查找的文本中去查找和验证值,进一步判断目标文本中是否存在与模式一致的字符串。

2、如何将编制好的正则表达式应用于编程语言,实现我们真正的需要,这是学习和使用正则的第二个问题,在这一点上,不同的编程语言其实现方式是不一样的.庆幸的是,较之编制正则表达式,掌握它们是非常简单的事。我们会在接下来的时间会慢慢详细论述。


现在举一个简单的例子,验证手机号码(包含虚拟号码和新号码段),那么使用的正则表达式为:

"^1([38][0-9]|4[5-9]|5[0-3,5-9]|66|7[0-8]|9[89])[0-9]{8}$",正则表达式其实是由一些”特殊字符”组成的。常常把这些组成正则表达式的”特殊字符”称之为元字符。元字符是正则表达式事先规定或约定的,用来表示字符、位置、数量和控制的专用符号。在组成正则表达式的元素中,有的是由两个或多个特殊字符组成一个单元,表示单一意义。


你是否有一种似曾相识的感觉?其实我们经常在日常工作中使用*号代表任意多个字符,用?号代表一个任意字符,那时称之为“通配符”;当下的VBA中Like函数的参数里有更多的特殊字符或结构,用来描述字符或字符串模式.不过,正则表达式里,那些”特殊字符”更多,语法规则更丰富,可以认为,它相当于是一门”微型”语言.如下所示为我们常用的正则表达式所要用的特殊字符,有需要的小伙伴可以记一下啦!

如何简单理解正则表达式?只需1分钟就可以看到她优美的舞姿_正则_02


下面列举了VBA中正则表示字符的所有元字符(序列),在以后的章节中会详细介绍.

(1)  常用不可打印字符:\n、\t、\f、\r、\v

(2)  八进制转义:\num    (num是一个八进制数)

(3)  十六进制转义:\xnum (num是一个十六进制数)

(4)  Unicode转义:\unum  (num是unicode代码点)

(5)  控制字符:\cchar       (char是A-Z之间的任意字母)

(6)  普通字符组:[a-z]和[^a-z]

(7)  几乎能匹配任何字符的元字符:英文句点

(8)  字符组缩略表示法:\w、\d、\s、\W、\D、\S


相信您如果看到这里的话,已经初步对正则表达式表达式有一个简单的了解了。那么我们是如何将他们应用于VBA中呢?下面用正则在VBA中来完成一个简单的任务:

需要处理的文本:”正则表达式其实很简单     “

需要完成的任务:删除目标文本中行尾空格.


删除目标文本中行尾空格?您应该马上就会看上面的图片吧!聪明的你,肯定会发现我们可以使用”\s”,这个可表示空格,+表示出现一个或多个字符,因此我们可使用”\s+”表示连续多个空格.$表示一行的行尾,于是可用以下正则表达式描述行尾的若干空格:“\s+$”(^\s*|\s*$),既然我们得到了这个正则表达式,那么现在就可以使用VBA来完成这个工作啦!

Sub Test01()
Dim regx, S$, Strnew$
S = "正则表达式其实很简单 "
‘创建一个正则对象regx
Set regx = CreateObject("vbscript.regexp")
‘设置正则对象regx的pattern属性,即把正则表达式以字符串形式赋值给pattern.
regx.Pattern = "\s+$"
‘应用对象提供的方法,实现相应功能.例子中,利用regx对象的Replace方法实现替换.
Strnew = regx.Replace(S, "")
End Sub


经过这个简单的例子,相信你已经了解了用正则处理文本的基本过程和思路,以及如何在VBA中使用正则的代码框架.以后的任务是全面掌握正则的所有元字符和它们的工作原理,另外还需要进一步了解正则对象的各种属性和方法. 在处理"大字符串"时,即使可用VBA函数或方法处理,但不如用正则处理速度快.比如:用Split将用逗号连接的10万个数字字符串转化的为数组,如果用正则处理,只需要一半的时间.


正则表达式的特点是:

1. 灵活性、逻辑性和功能性非常强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。


好啦!快乐的时间总是非常短暂的,又到了和大家说再见的时候,如果大家感觉本文如果对你有所帮助的话,请帮忙转发点赞,谢谢您能观看到现在,我们下期再见!

我是Excel教案,关注我持续分享更多的Excel技巧!

如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。