VBA或Visual Basic for Applications是Microsoft Excel中的强大编程工具。常规表达式类使VBA程序能够执行正则表达式搜索。后者是文本模式,可以帮助搜索包含具有特定和定义标准的电子邮件地址,电话号码和其他条件的字符串。在这个中级教程中,我们通过VBA Regex来走。我们假设您在Excel中具有VBA的基本知识。如果不是,我们建议你在继续之前,通过我们的Excel VBA基础课程。你也可能很快通过本教程阅读,了解您可以使用VBA完成所有内容的感觉。
“正则表达式”是用于匹配模式的等式。最重要的用途包括,字符串搜索和替换。RegEx可以许多编程语言提供,包括VBA,VB,VBScript,JavaScript,C#,VB.Net,Java,PHP等。您可以跳过和看看正则表达式是如何在C语言中使用的这门课。
需要量词来匹配几个字符。这里有几个。
图案 |
意义 |
例子 |
- - - - - - | 代表一个范围 | a-z是所有字母a到z的意思 |
[] | 代表任何一个引用的字符 | [abc]意思是a, b或c.[a -Z]意思是a, b,…,Z |
() | 用于分组目的 | |
| | 意思是'或' | X|Y,表示X或Y |
+ | 匹配字符一次或多次 | zo+匹配zoo,但不匹配z |
* | 匹配字符0次或多次 | “lo*”匹配“l”或“loo” |
吗? | 匹配字符0或1 | “b?ve?”匹配“永远不会”的“ve”。 |
Regex包含了很多特殊字符。我们来看一些常用的。
特殊字符 |
意义 |
。 | 匹配任何单个字符 |
美元 | 匹配输入的末尾 |
\ n | 匹配换行符 |
^ | 匹配输入的开头 |
\ t | 匹配制表符 |
D. | 匹配范围为0到9的数字 |
D. | 匹配非数字字符 |
\ w | 匹配任何包含“_”的字母数字字符 |
W. | 匹配任何非字母数字字符 |
\ s | 匹配任何空白字符,包括制表符,空格,换行符,换行符 |
S. | 匹配任何非白色空间字符 |
\r | 匹配回车字符;回车键 |
\ | 如果您想匹配特殊字符。例如“\”。”、“\ \” |
v \ | 找到垂直选项卡 |
字符可以通过将它们放在方括号内进行分组。
图案 |
意义 |
[XYZ] | 匹配字符x,y或z。 |
的[a -ž] | 匹配a和z之间的任意字符。 |
[^ abc]、[^ 0 - 9] | 开头的^符号表示“不”。这里匹配的字符不是a、b、c。 |
(+ * ?) | 说明一下,大多数特殊字符在方括号内没有任何意义。这个特定的表达式匹配方括号内的任何特殊字符。 |
正则表达式的大小写是否敏感?答案是“是”和“不是”。这完全取决于您编写regex代码和在程序中调用它们的方式。
字符串中的某些模式不能通过正则表达式匹配。这是一个计算模式的出现次数的示例。模式是“anbn”。这里的字符“a”和“b”都重复了n次。原因是正则表达式无法跟踪出现的次数。
当需要处理大量数据时,明智的做法是避免使用正则表达式。原因是,如果您没有正确地使用RegEx模式,它可能会导致程序的低效率。要了解更多关于VBA正则表达式以及如何使用它们,请查看这门课程。
打开您的Microsoft Excel应用程序。单击Developer选项卡。从这里您可以选择Visual Basic。从visual Basic菜单栏中,选择插入->模块。
模块打开新工作表后,请转到“工具”选项卡并选择“引用”。在这里,您可以获得包含复选框的项目列表。搜索VBScript的正则表达式。检查相应的复选框。
正则表达式具有三种regexp方法和四个regexp属性。让我们来看看他们每个人:
让我们使用一个示例程序中列出的属性
sub regex_tester()
设置objregexp_1 = createObject(“vbscript.regexp”)
objregexp_1.global = true
objregexp_1.ignorecase = true
objRegExp_1.Pattern = [a - z、a - z] * @ [a - z、a - z] *。com。
strToSearch = "[电子邮件受保护]”
设置regExp_Matches = objRegExp_1.Execute(strToSearch)
如果regExp_Matches。数= 1
MsgBox(“此字符串是有效的电子邮件地址。)
万一
终止子
在这个程序中,我们声明了子程序outineregex_tester()。
Set Objregexp_1 = CreateObject(“vbscript.regexp”),此语句从VBScript创建正则表达式对象。该对象具有执行正则表达式搜索的函数。如果您希望正则表达式匹配字符串,只需进一步发生字符串集,“objregexp1.global = true。”如果您想匹配字符串集的所有出现“objregexp.global = false”。If you want your regular expression to ignore the case of string, set “objRegExp1.IgnoreCase=true” If case is important set this property to false.”objRegExp_1.Pattern=[a-z,A-Z]*@[a-z,A-Z]*.com” this pattern denotes the string with alphabetical characters before and after @ symbol. If the regular expression object match the text in your input string set “regExpMatches.Count=1”
这是另一个VBA RegEx方法程序,它查找和替换字符串。让我们一起来看看。
函数RegExpReplace1(ByVal string1作为字符串,_
ByVal Pattern1As字符串,_
ByVal替换为1as字符串,_
可选的byval isgrobal1as boolean = true,_
可选ByVal IsCaseSensitive1As Boolean = True)作为字符串
将objRegExp设置为对象
设置objRegExp = CreateObject("vbscript.regexp")
objRegExp。全球= IsGlobal1
objRegExp。图案= Pattern1
objregexp.ignorecase =不是iscaseSensity1
RegExpReplace = objRegExp。替换(WhichString ReplaceWith)
结束功能
在此程序中,用户可以在使用参数“byval”时在运行时输入值。使用参数的值调用函数regexpreplace1。一个参数是要搜索的字符串;另一个参数是替换字符串。请注意,全局属性设置为true。这意味着搜索字符串的所有匹配项。该程序搜索字符串的出现,并使用替换字符串替换它们中的每一个。
你也可以这样做通过MrExcel查看本课程中整洁的VBA示例。
函数OnlyNumbers_1(ByValWhichString为String)作为变量
onlynumbers = cdbl(regexpreplace(regexpreplace(以restring,_
“[^ 0 - 9]”,vbNullString,真正的))
结束功能
请注意,CDBL()将表达式转换为Type Double。
正则表达式。方法将匹配正则表达式模式的字符串替换为指定的替换字符串。这个方法是重载的,即使用相同的函数名和不同的参数类型。调用哪个函数取决于传递的参数的数量和类型。我们看一些重载的替换函数。
替换(字符串,字符串,int32)在指定的输入字符串中,用指定的替换字符串替换与正则表达式模式匹配的指定最大字符串数。
替换(字符串,字符串,字符串)—在指定的输入字符串中,该函数将所有匹配指定正则表达式的字符串替换为指定的替换字符串。
替换(字符串,字符串,int32,int32)—在In子字符串中,该函数将指定的匹配正则表达式模式的最大字符串数替换为指定的替换字符串。
关于Replace()方法的更多信息,请参见我们的高级VBA课程在这里。
学习编程最好的方法是亲自尝试。您必须尝试一下代码,看看如何解决问题。请自己尝试一下这些例子,并让我们知道你的反馈。如果你需要快速进修课程,请随意通过无限的技能来实现这一令人敬畏的Excel VBA课程。