龙空技术网

咕吧课堂:excel vba正则表达式就是这么玩的,别声张,超简单!

阿奇的世界 994

前言:

此刻同学们对“vb按行读取文本”大致比较关心,同学们都需要剖析一些“vb按行读取文本”的相关资讯。那么小编同时在网上收集了一些关于“vb按行读取文本””的相关资讯,希望你们能喜欢,看官们一起来学习一下吧!

正则表达式的创建和字典一样具有同样的方法

1、通过VBE工具菜单引用Microsoft VBScript Regular Expressions 5.5类库,然后直接定义对象:Dim reg As New RegExp

2、使用CreateObject方法定义对象:CreateObject("VBSCRIPT.REGEXP")

RegExp对象的属性:

Global - true为全部匹配,false为只匹配第一个符合的

Multiline - 搜索字符串分布在多行,这个属性是要设置为True的。

IgnoreCase - true不区分大小写,false区分大小写

Pattern - 设置正则表达式模式

RegExp对象的方法:

Execute - 对指定的字符串执行正则表达式搜索

Replace - 替换在正则表达式查找中找到的文本。

Test - 对指定的字符串执行一个正则表达式搜索,true为找到,false为没找到

MatchCollection对象与Match对象

Count:匹配到的对象的数目

Item:通过索引值获取指定的元素。

Match对象(单个结果)有以下几个只读的属性:

FirstIndex - 匹配字符串在整个字符串中的位置,值从0开始。

Length - 匹配字符串的长度。

Value - 匹配的字符串。

SubMatches - 集合,匹配字符串中每个分组的值。作为集合类型,有Count和Item两个属性

正则规则千千万 就看你想咋匹配,弄清楚以下元字符含义,正则规则就靠它们了

[0-9]表示匹配任意一个数字

[a-zA-Z]表示匹配任意一个英文字母

[\u4e00-\u9fa5]表示匹配任意一个中文字符

代码 说明

. 匹配除换行符以外的任意字符

\w 匹配字母或数字或下划线或汉字

\s 匹配任意的空白符

\d 匹配数字

\b 匹配单词的开始或结束

^ 匹配字符串的开始

$ 匹配字符串的结束

代码/语法 说明

* 重复零次或更多次

+ 重复一次或更多次

? 重复零次或一次

{n} 重复n次

{n,} 重复n次或更多次

{n,m} 重复n到m次

代码/语法 说明

\W 匹配任意不是字母,数字,下划线,汉字的字符

\S 匹配任意不是空白符的字符

\D 匹配任意非数字的字符

\B 匹配不是单词开头或结束的位置

[^x] 匹配除了x以外的任意字符

[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

表达式 可匹配

[ab5@] 匹配 "a" 或 "b" 或 "5" 或 "@"

[^abc] 匹配 "a","b","c" 之外的任意一个字符

[f-k] 匹配 "f"~"k" 之间的任意一个字母

[^A-F0-3] 匹配 "A"~"F","0"~"3" 之外的任意一个字符

| 左右两边表达式之间 "或" 关系,匹配左边或者右边

( ) (1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰

(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到

正则表达式实例:

Sub Reg1()

'定义正则表达式对象

Dim oR1 As Object

'定义匹配字符串集合对象

Dim oM As Object

'创建正则表达式

'定义要执行正则查找的文本变量

Dim sT As String

sT = "关注a咕吧b课堂c"

Set oR1 = CreateObject("vbscript.regexp")

With oR1

'设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项

.Global = True

'设置是否区分大小写,True表示不区分大小写, False表示区分大小写

.IgnoreCase = True

'设置要查找的字符模式

.Pattern = "[\u4e00-\u9fa5]+"

'判断是否可以找到匹配的字符,若可以则返回True

MsgBox .Test(sT)

'对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空

Set oM = .Execute(sT)

'把字符串中用正则找到的所有匹配字符替换为其它字符

MsgBox .Replace(sT, "")

End With

Set oR = Nothing

Set oM = Nothing

End Sub

当然你也可以编成自定义函数 在工作表应用 把sT编成形参

Function rega(sT as string)

Dim oR1 As Object

'定义匹配字符串集合对象

Dim oM As Object

'创建正则表达式

Set oR1 = CreateObject("vbscript.regexp")

With oR1

'设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项

.Global = True

'设置是否区分大小写,True表示不区分大小写, False表示区分大小写

.IgnoreCase = True

'设置要查找的字符模式

.Pattern = "[\u4e00-\u9fa5]+"

'对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空

Set oM = .Execute(sT)

'把字符串中用正则找到的所有匹配字符替换为其它字符

rega= .Replace(sT, "")

End With

Set oR1 = Nothing '把对象置空

Set oM = Nothing

End Function

如何提取匹配的结果?当匹配的结果有多个时

1、用 for each ……in……的方式提取

dim mh as match' as match也可以省略 而把mh声明为变量型

Set mm = reg.Execute(str)

For Each mh In mm

Debug.Print mh.value

Next

匹配结果是一个集合可以用count方法计元素个数,用item方法索引某个元素值

mm.count '结果计数

mm.item(0)'第一个结果,item也是可以省略的而直接写成mm(0)

2、用for……to……方式提取结果

Set mm = reg.Execute(str)

For i=0 to mm.count-1

Debug.print mm(i).value

Next i

关注咕吧课堂

下期精彩继续!

标签: #vb按行读取文本 #vba正则表达式实例 #正则表达式 vb #vb编程数学计算表达式 #vb表达式的值