全明一起VBA实战篇 专题3 第四回 环视功能预判位置,边界问题轻松解决

相关知识点:

环视(Look Around)或译为“零宽度断言”,代表的不是字符,代表文本中一个位置。比如(?=abc)代表字符串中一个位置,该位置右边必须是“abc”

    (?=北京|$)可匹配这样一个位置:其中右边或者是“北京”,或者是行尾,|代表或者,$代表在多行模式下代表一行末尾。

环视的四种形式:

例1 北京车站分别显示在一列中。

 

Sub lookrounddemo()

       Dim reg as Object, matches as Object

       Dim i as long, s as String

       ‘从A1单元格读入待分析的原文本

       s=cells(1,1)

‘创建并设置正则表达式对象,Multiline为True代表“多行模式”

‘在这种模式下,可以用$符号代表每一行的结尾

Set reg=CreateObject(“vbscript.regexp”)

reg.Global=True

reg.MulitiLine=True\

‘设计正则表达式

‘reg.Pattern=” 北京\S+北京”   ‘\S:非空白字符(\s相反),贪婪搜索原则

                           ‘实际结果是:北京西北京站北京北北京南站北京,少了一个东字

‘reg.Pattern=” 北京\S+?北京”  ‘在+*等各种量词后面再写一个?,

‘代表执行“懒惰搜索”,匹配尽可能少的字符,

‘结果:北京西北京,北京北北京

                           ‘北京西北京北京北北京南站北京东

 ‘reg.Pattern=” 北京[^北]+”    ‘查找北京后不含(取反不能用是字符串)北的字符串,结果没有北京北

reg.Pattern=” 北京\S+?(?=北京|$)”  ‘(?=北京)环视功能

 

 ‘执行正则表达式,并将匹配出的结果依次写在A列各行

Set matches=reg.Execute(s)

For i=0 To matches.Count -1

       Cells(i+2,1)=matches(i).Value

Next i

End Sub

例2 列表本地号码,不要区号

Sub lookrounddemo1()

       Dim reg as Object, matches as Object

       Dim i as long, s as String

       ‘从A1单元格读入待分析的原文本

       s=cells(1,1)

‘创建并设置正则表达式对象,Multiline为True代表“多行模式”

‘在这种模式下,可以用$符号代表每一行的结尾

Set reg=CreateObject(“vbscript.regexp”)

reg.Global=True

reg.MulitiLine=True\

‘设计正则表达式

‘reg.Pattern=” \d+(?!\d|-)”  

‘执行正则表达式,并将匹配出的结果依次写在A列各行

Set matches=reg.Execute(s)

For i=0 To matches.Count -1

       Cells(i+2,1)=matches(i).Value

Next i

End Sub

例3 用split 拆分字符串方法,列表北京站名

Sub splitdemo()

       Dim a() as string, i as long, s

       a=split(Range(“a1”.value,”北京”))

       i=2

       For Each s In a

              If s<>”” Then

                     Cells(i,1)=”北京” & s

                     i=i+1

              End if

       Next s

End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值