EXCEL VBA 正则表达式 从实例开始Word文档下载推荐.docx
- 文档编号:19213340
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:33
- 大小:30.11KB
EXCEL VBA 正则表达式 从实例开始Word文档下载推荐.docx
《EXCEL VBA 正则表达式 从实例开始Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《EXCEL VBA 正则表达式 从实例开始Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。
如果搜索是区分大小写的,则IgnoreCase属性应该为False;
否则应该设为True。
缺省值为True。
Pattern-设置或返回被搜索的正则表达式模式。
被搜索的正则字符串表达式。
它包含各种正则表达式字符。
RegExp对象的方法:
Execute-对指定的字符串执行正则表达式搜索。
需要传入要在其上执行正则表达式的文本字符串。
正则表达式搜索的设计模式是通过RegExp对象的Pattern来设置的。
Execute方法返回一个Matches集合,其中包含了在string中找到的每一个匹配的Match对象。
如果未找到匹配,Execute将返回空的Matches集合。
Replace-替换在正则表达式查找中找到的文本?
Test-对指定的字符串执行一个正则表达式搜索,并返回一个Boolean值指示是否找到匹配的模式。
RegExp.Global属性对Test方法没有影响。
如果找到了匹配的模式,Test方法返回True;
否则返回False。
MatchCollection对象与Match对象
匹配到的所有对象放在MatchCollection集合中,这个集合对象只有两个只读属性:
Count:
匹配到的对象的数目
Item:
集合的又一通用方法,需要传入Index值获取指定的元素。
一般,可以使用ForEach语句枚举集合中的对象。
集合中对象的类型是Match。
Match对象有以下几个只读的属性:
FirstIndex-匹配字符串在整个字符串中的位置,值从0开始。
Length-匹配字符串的长度?
Value-匹配的字符串?
SubMatches-集合,匹配字符串中每个分组的值。
作为集合类型,有Count和Item两个属性。
常用的正则表达式主要有以下几种:
匹配中文字符的正则表达式:
[\u4e00-\u9fa5]
评注:
匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在):
[^\x00-\xff]
可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:
\n\s*\r
评注:
可以用来删除空白行
匹配HTML标记的正则表达式:
<
(\S*?
)[^>
]*>
.*?
/>
|<
/>
网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:
^\s*|\s*$
可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:
\w+([-+.]\w+)*\w+([-.]\w+)*\.\w+([-.]\w+)*
表单验证时很实用
匹配网址URL的正则表达式:
[a-zA-z]+:
//[^\s]*
网上流传的版本功能很有限,上面这个基本可以满足需求
匹配是否合法(字母开头,允许5-16字节,允许字母数字下划线):
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国:
\d-\d|\d-\d
匹配形式如0或2
匹配腾讯QQ号:
[1-9][0-9]{4,}
腾讯QQ号从10000开始
匹配中国邮政编码:
[1-9]\d(?
!
\d)
中国邮政编码为6位数字
匹配:
\d|\d
中国的为15位或18位
匹配ip地址:
\d+\.\d+\.\d+\.\d+
提取ip地址时有用
匹配特定数字:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$//匹配负整数
^-?
[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数+0)
^-[1-9]\d*|0$ //匹配非正整数(负整数+0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?
\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?
\.0+|0$ //匹配非负浮点数(正浮点数+0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?
\.0+|0$ //匹配非正浮点数(负浮点数+0)
处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
最基本也是最常用的一些表达式
代码/语法说明
匹配除换行符以外的任意字符.
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
表2.常用的限定符
*重复零次或更多次
重复一次或更多次+
Print重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
表3.常用的反义代码
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符
表4.常用分组语法
代码/语法说明分类
(exp)匹配exp,并捕获文本到自动命名的组里捕获
(?
name>
exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?
name'
exp)
:
exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号
=exp)匹配exp前面的位置零宽断言
=exp)匹配exp后面的位置
exp)匹配后面跟的不是exp的位置
exp)匹配前面不是exp的位置
#comment)这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读注释
表5.懒惰限定符
*?
重复任意次,但尽可能少重复
+?
重复1次或更多次,但尽可能少重复
?
重复0次或1次,但尽可能少重复
{n,m}?
重复n到m次,但尽可能少重复
{n,}?
重复n次以上,但尽可能少重复
表6.常用的处理选项
名称说明
IgnoreCase(忽略大小写)匹配时不区分大小写。
Multiline(多行模式)更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。
(在此模式下,$的精确含意是:
匹配\n之前的位置以及字符串结束前的位置.)
Singleline(单行模式)更改.的含义,使它与每一个字符匹配(包括换行符\n)。
IgnorePatternWhitespace(忽略空白)忽略表达式中的非转义空白并启用由#标记的注释。
ExplicitCapture(显式捕获)仅捕获已被显式命名的组。
表7.尚未详细讨论的语法
\a报警字符(打印它的效果是电脑嘀一声)
\b通常是单词分界位置,但如果在字符类里使用代表退格
\t制表符,Tab
\r回车
\v竖向制表符
\f换页符
\n换行符
\eEscape
\0nnASCII代码中八进制代码为nn的字符
\xnnASCII代码中十六进制代码为nn的字符
\unnnnUnicode代码中十六进制代码为nnnn的字符
\cNASCII控制字符。
比如\cC代表Ctrl+C
\A字符串开头(类似^,但不受处理多行选项的影响)
\Z字符串结尾或行尾(不受处理多行选项的影响)
\z字符串结尾(类似$,但不受处理多行选项的影响)
\G当前搜索的开头
\p{name}Unicode中命名为name的字符类,例如\p{IsGreek}
>
exp)贪婪子表达式
x>
-<
y>
exp)平衡组
im-nsx:
exp)在子表达式exp中改变处理选项
im-nsx)为表达式后面的部分改变处理选项
(exp)yes|no)把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;
否则使用no
(exp)yes)同上,只是使用空表达式作为no
(name)yes|no)如果命名为name的组捕获到了容,使用yes作为表达式;
(name)yes)同上,只是使用空表达式作为no
在VBA中使用正则表达式,可以通过下列途径实现:
Execute方法返回一个Matches集合,其中包含了在string中找到的每一个匹配的Match对象。
正则表达式很强大,是处理文本的首选,不管你信不信,反正我是信了。
说了很多,
最后以一个小例子结尾吧:
SubTest()
DimregAsNewRegExp
Withreg
.Global=True
.IgnoreCase=True
.Pattern="
\d+"
EndWith
DimmcAsMatchCollection
DimmAsmatch
Setmc=reg.Execute("
123aaaaa987uiiui999"
)
ForEachmInmc
MsgBoxm.Value
Next
EndSub
FunctionExReplace(sStrAsString,sReplStrAsString,sPatrnAsString)AsString
正则表达式替换
参数说明:
sStr原字符串,sReplStr将替换的字符串,sPatrn样式
返回参数,返回替换后的值
DimregEXAsObject
SetregEX=CreateObject("
)'
RegEx为建立正则表达式
regEX.Global=True'
设置全局可用
regEX.Pattern=sPatrn'
设置样式
ExReplace=regEX.Replace(sStr,sReplStr)'
执行替换
SetregEX=Nothing
EndFunction
FunctionExExce(sStrAsString,sPatrnAsString,OptionalICAsBoolean=True,OptionalGAsBoolean=True)AsObject
正则表达式搜索
sStr原字符串,Patrn样式,IC是否区别大小写,G是否全局可用
返回参数,返回的是一个对象,ExExce.Count是搜索的数量
ExExce(n).FirstIndex搜索的第n个串的位置,n>
=0
ExExce(n).Value搜索的第n个串的值,n>
regEX.IgnoreCase=IC'
设置是否区分大小写。
SetExExce=regEX.Execute(sStr)'
执行搜索
FunctionExTest(sStrAsString,sPatrnAsString,ICAsBoolean)AsBoolean
正则表达式匹配
VBA代码
sStr原字符串,Patrn样式,IC是否区别大小写
返回参数,返回一个逻辑值,True为匹配,False为不匹配
ExTest=regEX.Test(sStr)'
执行搜索测试
PublicSub去重复()
Dimss,re,rv
ss="
Isisthecostofofgasolinegoingupup?
."
&
vbNewLine
Setre=NewRegExp
re.Pattern="
\b([a-z]+)\1\b"
re.Global=True
re.IgnoreCase=True
re.MultiLine=True
rv=re.Replace(ss,"
$1"
MsgBoxrv
FunctionRegExpTest(patrn,strng)
正则表达式(RegExp)对象
提供简单的正则表达式支持功能?
下面的代码说明了RegExp对象的用法:
DimregEX,match,matches'
建立变量。
SetregEX=NewRegExp'
建立正则表达式。
regEX.Pattern=patrn'
设置模式。
regEX.IgnoreCase=True'
设置是否区分字符大小写。
设置全局可用性。
Setmatches=regEX.Execute(strng)'
执行搜索。
ForEachmatchInmatches'
遍历匹配集合。
retStr=retStr&
"
Matchfoundatposition"
match.FirstIndex&
.MatchValueis'
"
match.Value&
vbCrLf
RegExpTest=retStr
Global属性
设置或返回一个Boolean值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。
Object.Global[=True|False]
对象参数总是RegExp对象。
如果搜索应用于整个字符串,Global属性的值为True,否则其值为False。
默认的设置为False。
下面的代码说明了Global属性的用法(改变赋予Global属性的值并观察其效果):
FunctionRegExpTest1(patrn,strng)
建立规表达式。
设置是否区分字母的大小写。
设置全程性质。
重复匹配集合
RetStr=RetStr&
Match.FirstIndex&
.MatchValueis'
Match.Value&
&
vbCRLFNext
EndFunction
'
IgnoreCase属性
设置或返回一个Boolean值,指明模式搜索是否区分大小写。
Object.IgnoreCase[=True|False]
Object参数总是一个RegExp对象。
如果搜索是区分大小写的,则IgnoreCase属性为False;
否则为True。
缺省值为False。
说明
下面的代码说明了IgnoreCase属性的用法(改变赋予IgnoreCase属性的值以观察其效果):
FunctionRegExpTest2(patrn,strng)
设置不区分大小写。
设置全局可用性
F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EXCEL VBA 正则表达式 从实例开始 正则 表达式 实例 开始