正则表达式入门教程(VBA)

合集下载

在VB6VBA中使用正则表达式

在VB6VBA中使用正则表达式

在VB6VBA中使用正则表达式一、关于起因最近在Office的QQ群里问如何在一串字符串中提取数值并加总的问题。

如果使用正则表达式可以非常迅速的解决这个问题。

那么今天我就探讨一下在VB6/VBA中使用正则表达式的方法及代码,另外为了快速测试正则表达式,我给大家推荐notepad++及使用方式。

二、操作步骤1、按Alt+F11进入Excel的VBE环境,依次选择“工具/引用”菜单,选择“Microsoft VBScript Regular Express”;2、插入一个模块,在模块中输入如下所示的代码;1 Function SumValueInText(TargetRange As Range) As Double2 Dim mRegExp As RegExp3 Dim mMatches As MatchCollection '匹配字符串集合对象4 Dim mMatch As Match '匹配字符串56 Set mRegExp = New RegExp7 With mRegExp8 .Global = True 'True表示匹配所有, False表示仅匹配第一个符合项9 .IgnoreCase = True 'True表示不区分大小写, False表示区分大小写10 .Pattern = '([0-9])?[.]([0-9])+|([0-9])+' '匹配字符模式11 Set mMatches = .Execute(TargetRange.Text) '执行正则查找,返回所有匹配结果的集合,若未找到,则为空12 For Each mMatch In mMatches13 SumValueInText = SumValueInText +14 Next15 End With1617 Set mRegExp = Nothing18 Set mMatches = Nothing19 End Function3、在工作表的A列单元格中输入各种测试字符串,在B列单元格中输入自定义函数进行测试,结果如下图所示;三、Attention在VB6/VBA中使用正则表达式时,我们也可以省去第一步,即采用后期绑定的方式来使用正则表达式,但是代码要做相应的调整,如下所示为调整后的代码。

VBA之正则表达式(11)

VBA之正则表达式(11)

VBA之正则表达式(11)上一篇《添加千分位(2/3)》博文讲解了实现添加千分位功能的正则表达式如下:((\.\d+[\w\W]*?)*?\d)(?=(\d{3})+(\D|$))如果调整一下测试段落的顺序:珠穆朗玛峰高度8848.0光速是300000000米/秒马里亚纳海沟最大长度: 2550,平均深度:8000,最大宽度: 69,最大深度11034大家背诵圆周率3.1415926535此时最后一行的小数部分符合表达式的匹配规则,正则替换时将在535之前添加千分位。

需要处理的文字段落可能有各种情况,当然可以用代码去判断段落末尾是否为小数数字。

这里提供另一种解决问题的思路,既然已经有了正则可以消耗掉小数部分数字,那么我们就在字符串末尾构造一个符合匹配规则的字符串。

能实现这个目的的字符串可能有很多,例如.8888,这样就成功的把最后一个匹配组扩展到了添加的后缀字符串中,正则替换完成后,去掉后缀字符串(注意替换后,需要去掉的字符串长度增加一位,因为多了一个千分位)就可以得到完美的结果。

VBA代码如下:Sub RegExpDemo3()Dim strTxt As String, strPad As StringDim strRes As StringDim objRegEx As ObjectSet objRegEx = CreateObject("vbscript.regexp")objRegEx.Pattern ="((\.\d+[\w\W]+?)*?\d)(?=(\d{3})+(\D|$))"objRegEx.Global = True'objRegEx.MultiLine = TruestrPad = ".8888"strTxt = "珠穆朗玛峰高度8848.0" & vbNewLine & _"光速是300000000米/秒" & vbNewLine & _"马里亚纳海沟最大长度: 2550,平均深度: 8000," & vbNewLine & _"最大宽度: 69,最大深度11034" & vbNewLine & _"大家背诵圆周率3.1415926535"strRes = objRegEx.Replace(strTxt & strPad, "$1,")MsgBox strTxt & vbNewLine & vbNewLine & _Left(strRes, Len(strRes) - Len(strPad) - 1)Set objRegEx = NothingEnd Sub结果如图所示。

VBA中的正则表达式处理方法

VBA中的正则表达式处理方法

VBA中的正则表达式处理方法在VBA(Visual Basic for Applications)中,正则表达式是一种强大且灵活的工具,用于处理和匹配文本。

它可以帮助我们在字符串中查找特定的模式,并进行替换、提取等操作。

本文将介绍VBA中的正则表达式处理方法,以帮助您更好地使用这个强大的功能。

一、引用正则表达式对象在使用VBA处理正则表达式之前,我们需要先引用"Microsoft VBScript Regular Expressions"这一对象库。

在VBA编辑器中,点击"工具"->"引用",然后勾选上面提到的对象库即可。

二、创建正则表达式对象要使用正则表达式,我们首先需要创建一个正则表达式对象。

创建对象的方法是使用`CreateObject`函数,并指定要创建的对象类型为"VBScript.RegExp"。

下面是创建正则表达式对象的示例代码:```VBADim regex As ObjectSet regex = CreateObject("VBScript.RegExp")```三、设置正则表达式的模式正则表达式的模式定义了我们要匹配的文本规则。

在VBA中,有以下几种常用的模式:1. `Pattern`:要匹配的模式字符串。

例如,可以使用`"\d+"`匹配一个或多个数字。

2. `Global`:指示是否应该全局搜索,而不仅仅是第一个匹配项。

默认情况下为False,只匹配第一个匹配项。

3. `IgnoreCase`:指示匹配是否应该忽略大小写。

默认情况下为False。

下面是设置正则表达式模式的示例代码:```VBAregex.Pattern = "\d+"regex.Global = Trueregex.IgnoreCase = True```四、使用正则表达式进行匹配一旦我们设置了正则表达式的模式,就可以使用它来进行匹配。

VBA 中的正则表达式应用与实例讲解

VBA 中的正则表达式应用与实例讲解

VBA 中的正则表达式应用与实例讲解正则表达式是一种强大的文本处理工具,可以用来匹配、搜索、替换和验证字符串。

在 VBA 中,正则表达式可以帮助开发人员更高效地处理字符串,并提供了更灵活的模式匹配功能。

本文将介绍 VBA 中正则表达式的基本用法,并通过实例讲解其实际应用。

一、正则表达式的基本语法1.1 字符匹配正则表达式由普通字符和特殊字符组成。

普通字符是指字母、数字和常见的标点符号,它们直接匹配相同的字符。

特殊字符是具有特殊含义的字符,如元字符、转义字符和限定符。

1.2 元字符元字符是正则表达式中具有特殊含义的字符,它们可以用来匹配文本中的特定模式。

常见的元字符包括:- . (点号):匹配任意单个字符,除了换行符。

- ^ (脱字符):匹配字符串的开头。

例如,"^abc" 匹配以 "abc" 开头的字符串。

- $ (美元符号):匹配字符串的结尾。

例如,"abc$" 匹配以 "abc" 结尾的字符串。

- \b (单词边界):匹配单词的边界,即单词与非单词字符之间的位置。

1.3 转义字符转义字符用来取消元字符的特殊含义,使其失去特殊含义并按照字面意义进行匹配。

常见的转义字符包括:- \ (反斜杠):用于转义具有特殊含义的字符,如 ".", "^", "$", "\" 等。

1.4 限定符限定符用于指定模式出现的次数或范围。

常见的限定符包括:- * (星号):匹配前面的元素零次或多次。

- + (加号):匹配前面的元素一次或多次。

- ? (问号):匹配前面的元素零次或一次。

- {n}:匹配前面的元素恰好出现 n 次。

- {n,}:匹配前面的元素至少出现 n 次。

- {n,m}:匹配前面的元素至少出现 n 次,最多出现 m 次。

二、在 VBA 中使用正则表达式要在 VBA 中使用正则表达式,首先需要添加对 "Microsoft VBScript Regular Expressions" 库的引用。

VBA中的正则表达式(一)

VBA中的正则表达式(一)

VBA中的正则表达式(一)VBA中的正则表达式(一)——Global属性1. 正则表达式的用处从给定的文本中,找到符合正则表达式规则的文本,并提取出来。

例如从一串文本中找到电话号码、找到邮箱地址等。

*上述是正则表达式的其中一个用法2. 正则表达式对象引入Sub regular_study()'创建正则表达式对象,并命名为reDim re As ObjectSet re = CreateObject('VBScript.RegExp')End Sub3. Global属性的作用Global属性只有两个可选状态,True或False。

Global属性案例Sub regular_study()'创建正则表达式对象,并命名为reDim re As ObjectSet re = CreateObject('VBScript.RegExp')With re.Global = True'.Global = False'mytxt为案例的文本mytxt = '宏蜘蛛欢迎你!下面开始学习宏蜘蛛正则表达式教程。

''Pattern表示,查找mytxt文本中是否有“宏蜘蛛”.Pattern = '宏蜘蛛''将查找的结果赋值给myresults,返回的结果是个数组Set myresults = .Execute(mytxt)For Each myresult In myresultsDebug.Print myresultNextDebug.Print 'mytxt字符串中(宏蜘蛛)的个数为:' & myresults.CountEnd WithEnd Sub为True时的输出结果↓全文有两处“宏蜘蛛”,已全部匹配出来。

宏蜘蛛宏蜘蛛mytxt字符串中(宏蜘蛛)的个数为:2为False时的输出结果↓全文有两处“宏蜘蛛”,只匹配一处。

VBA之正则表达式(15)

VBA之正则表达式(15)

VBA之正则表达式(15)实例需求:提取@之间的纯数字(无小数点),并将结果累计求和。

测试字符串:abc100@200@300$def400ghj@500@600这个字符提取规则相对简单,直接使用VBA方法也可以实现。

Sub VBA_DEMO()Dim strTxt As StringDim arrDataDim strData As StringDim i As IntegerDim intAmt As IntegerstrTxt = "abc100@200@300$def400ghj@500@600"arrData = Split(strTxt, "@")For i = 1 To UBound(arrData) - 1strData = arrData(i)If IsNumeric(strData) Then intAmt = intAmt + Val(strData) Next iDebug.Print intAmtEnd Sub【代码解析】第8行代码使用SPLIT函数以@作为分隔符将字符串拆分数组,注意数组的下标是从1开始的。

第11行代码使用ISNUMRIC函数判断数组元素是否只有数字,如果符合条件则进行累加。

其中VAL函数将字符转换为数字,由于VBA中可以自动进行类型转换,所以此代码也可以简化为。

If IsNumeric(strData) Then intAmt = intAmt + strData第13行代码在VBE的【立即】窗口中输出结果。

如果使用正则,该如何实现呢?Sub RegExpDemo_0606()Dim strTxt As String, strKey As StringDim objRegEx As Object, objMatch As ObjectDim objMH As ObjectDim intAmt As IntegerSet objRegEx = CreateObject("vbscript.regexp")objRegEx.Pattern = "@(\d+)@"objRegEx.Global = TruestrTxt = "abc100@200@300$def400ghj@500@600"Set objMatch = objRegEx.Execute(strTxt)If objMatch.Count > 0 ThenFor Each objMH In objMatchstrKey = objMH.submatches(0)intAmt = intAmt + Val(strKey)NextEnd IfDebug.Print intAmtSet objMH = NothingSet objMatch = NothingSet objRegEx = NothingEnd Sub【代码解析】第7行代码设置正则匹配模式为@(\d+)@,匹配组为一个或者多个数字,并且被@包裹。

如何在VBA中利用正则表达式进行文本处理

如何在VBA中利用正则表达式进行文本处理

如何在VBA中利用正则表达式进行文本处理VBA (Visual Basic for Applications) 是一种编程语言,可扩展微软的Office套件。

利用VBA中的正则表达式,您可以在文本处理过程中实现更高效和准确的结果。

本文将介绍如何使用VBA中的正则表达式进行文本处理。

## 1. 理解正则表达式和VBA中的正则表达式对象正则表达式是一种描述文本模式的强大工具,常用于匹配、搜索和替换文本。

在VBA中,可以通过创建正则表达式对象来利用这些功能。

要使用正则表达式,首先需要了解一些常用的符号和语法规则。

例如,"." 表示匹配除换行符以外的任何字符,"^" 表示匹配行的开头,"$" 表示匹配行的结尾等等。

## 2. 引用Microsoft VBScript Regular Expressions库在使用VBA中的正则表达式之前,需要引用Microsoft VBScript Regular Expressions库。

打开VBA编辑器(按下Alt + F11),然后选择"工具" -> "引用"。

在弹出的引用对话框中,找到并勾选"Microsoft VBScript Regular Expressions"。

## 3. 创建正则表达式对象在VBA中,通过创建正则表达式对象来使用正则表达式功能。

使用以下语法创建正则表达式对象:```vbaDim regex As ObjectSet regex = CreateObject("VBScript.RegExp")```## 4. 设置正则表达式模式在创建正则表达式对象之后,需要设置正则表达式模式。

设置模式时,可以使用一些常用的正则表达式语句和符号:```vbaregex.Pattern = "pattern"```其中,"pattern" 为您要匹配或搜索的文本模式。

正则表达式基础符号(1)VBA实例教程

正则表达式基础符号(1)VBA实例教程

正则表达式基础符号(1)VBA实例教程从这节开始分享一些正则表达式的基础符号和例子,我自己关于这方面的资料比较少,都是网上搜集的,大家看看即可。

先看几个符号:\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。

例如,“\\n”匹配\n。

“\n”匹配换行符。

序列“\\”匹配“\”而“\(”则匹配“(”。

\d匹配一个数字字符。

等价于[0-9]。

\D匹配一个非数字字符。

等价于[^0-9]。

\w匹配包括下划线的任何单词字符。

等价于“[A-Za-z0-9_]”。

\W匹配任何非单词字符。

等价于“[^A-Za-z0-9_]”。

.点匹配除“\r\n”之外的任何单个字符。

要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。

第一个\就是为了转义,比如"\n"代表换行符,如果你想要匹配的是字符串"\n"本身而不是换行符就要在前面再加一个\。

剩下几个都很简单,一看就明白,下面看个例子。

还看上节那个挖掘机的例子Sub Macro()Dim str, regxstr = "学挖掘机1234哪789家00强"Set regx = CreateObject("VBScript.RegExp")With regx.Global = True.Pattern = "\d"str = .Replace(str, "")End WithMsgBox strEnd Sub如上面所说的\d匹配所有数字字符,那我将所有数字字符都替换为空那就只剩下了汉字,同理,如果我想只数字,把汉字去掉,那只要把Pattern属性变为"\D"即可,匹配所有非数字,然后再将其替换为空。

当然如果我们的原字符串中再加上一些英文字母,比如"学挖掘机1234A哪789B家00C强",要想提取出汉字就得匹配任何单词字符,再将其替换,那Pattern就是"\w",反过来要去汉字就得写成大写的"\W"。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档