正则表达式的主要用途是匹配出字符串中满足某种条件的字符,如在一串杂乱的字符串中匹配出只是字母的字符或只是数字的字符。
正则表达式广泛的应用于VBA、python等编程语言中,尽管它的语法比较晦涩奇怪,但由于它所提的强大功能和便利性,使得正则表达式的运用非常的普遍。
这次这篇文章的主要内容就是通过一个例子介绍一下VBA中正则表达式的运用。
如上图所示,C2和C3单元格中,各存在着一个包含有汉字、字母、数字三种不同特征的字符所组成的字符,现在需要将他们按照不同的特征进行区分。
如果一个一个的进行区分未免太过繁琐,特别是需要区分的字符串很长或者字符串有很多的情况下,耗费的精神和时间会更多,这时,用正则表达式就会轻松不少。
经过编写和调试,VBA代码如下面两幅图所示,其中的绿字是对左边的代码的解释:
最终运行的结果如下图所示:
在这里,最右边一行,也就是输出是纯汉字的单元格,代码中正则表达式的运用与输出过程与左边两个单元格是不一样的,尽管其表现出来的结果是类似。在这里,代码中运用的是.Replace方法,也就是将匹配的字符进行了替换(替换为了空字符,也就是“”,相当于匹配的字符删去了),将其他未匹配的字符进行了直接输出,而不是将匹配的字符进行了赋值,经过转换后输入单元格。这也是编程的一个特征:条条大路通罗马。没有绝对正确绝对正统的代码编写,只要能够得到想要的结果并且性能能够接受,那么无论怎么编写代码,这都是代码编写者的自由。
需要注意的是,正则表达式不是一个非常简单的东西,如果有自己编写正则表达式的要求,则编写者需要有一定的正则表达式的规则基础,所以对于正则表达式的运用,如果是需要编写一些特殊的匹配,那么我个人建议先将正则表达式的一些编写规则进行一定的学习和熟练。尽管正则表达式的规则比较晦涩和奇怪,但好在其规则并不是很多,更多的是需要去实践而不是死记硬背(因为不动手,之前记住了也会忘),并且如果学会了正则表达式的规则,那么就可以随心所欲的根据自己的需要来进行个人化的正则表达匹配编写。但另一方面,如果需要匹配的都是些常见的字符(如数字,字母,邮政编码等),那么网上会有一些已经编写好并广泛运用的正则表达式匹配,只需将这之直接运用到自己的代码中即可。
文章的最后,我将相关的代码赋予下方。另外,从下次文章开始,我会开始写一些关于VBA编程方面的基础操作和编写的文章,敬请期待~
Sub 正则()
Set oRegExp1 = CreateObject('vbscript.regexp')
Set oRegExp2 = CreateObject('vbscript.regexp')
With oRegExp1
.Global = True
.IgnoreCase = True
.Pattern = '[a-z] '
End With
With oRegExp2
.Global = True
.IgnoreCase = True
.Pattern = '[0-9] '
End With
For i = 2 To 3
Set a = oRegExp1.Execute(Range('C' & i))
For j = 0 To a.Count - 1
b = b & a(j)
Next
Range('D' & i) = b
b = ''
Next
For k = 2 To 3
Set c = oRegExp2.Execute(Range('C' & k))
For l = 0 To c.Count - 1
d = d & c(l)
Next
Range('E' & k) = d
d = ''
Next
For i = 2 To 3
e = oRegExp1.Replace(Range('C' & i).Value, '')
Range('F' & i) = oRegExp2.Replace(e, '')
Next
End Sub
联系客服