Dzwebs.Net

撰写电脑技术杂文十余年

EXCEL VBA正则表达式的介绍及使用下篇

Admin | 2011-3-13 9:20:58 | 被阅次数 | 14254

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆

  接上篇…

  E、重复指示

  正则表达式的另外一个强大的功能是重复匹配的能力。前述的任何一种“原子”之后,都可以指定一个重复指示符。下面列出各种重复指示符:

  ? 表示前一“原子”可有可无(重复0或1次)。例如 “我们?”匹配“我”或“我们”;

  + 表示前一“原子”至少匹配一次。例如“\d+”匹 配任何一个无符号整数;

  * 表示前一“前子”重复匹配0或多次。例如“\h\w*” 表示许多高级语言对“变量”的定义:以字母或下划 线开头,后接任意多个字母数字或下划线;

  {n} 表示前一“原子”重复匹配n次。例如“\c啦{3}” 匹配“哗啦啦啦”或“呼啦啦啦”等;

  {n,m} 表示前一“原子”重复匹配n至m次,其中n<=m。如果 n>m,将自动交换m与n的值;

  {n,} 至少重复匹配n次,相当于{n,无穷大};

  {,m} 至多重复匹配m次,相当于{0,m};

  {} 重复任意多次,相当于*。

  在前面所述的各种重复指示符中,如果重复的次数不定,将匹配尽可能长的目标串(但最多不超过32767次,这是内设的上限)。例如有一字符串“你好,我好,大家好”,表达式“你.*好”将匹配整个字符串,而不是“你好”或“你好,我好”。如果需要匹配尽可能短的目标串,可以采用前述的最后四种形式,并在“{”之后加上“-”号。上例中的表达式如改为“你.{-}好”,则匹配串为“你好”。

  {-n,m} 重复匹配m至n次,匹配次数尽可能少;

  {-n,} 至少重复匹配n次,匹配次数尽可能少;

  {-,m} 至多重复匹配m次,匹配次数尽可能少,相当于{-0,m};

  {-} 重复任意多次,类似于*,但匹配次数尽可能少。

  重复指示符只对紧邻在其前的“原子”起作用,例如“你好+”将匹配“你好”,“你好好”……。但是不会匹配“你好你好”。如果要重复匹配一组原子,可以使用括号(子表达式),如“(你好)+”就会匹配“你好你好”。

  需要指出的是,重复指示符与引用子表达式具有不同的含义。重复指示符是重复“匹配”,至于匹配的内容则可以不同;而引用子表达式则是重复匹配的内容。例如,“\d{2}”可以匹配任何一个两位数的整数,但是“(\d)\1”只能匹配“11”、“22”、“33”等数字相同两位数。当然,也可以重复引用子表达式,如“(\d)\1*”可以匹配“2”,“33”、“111”等各位数全同的整数。

  如前所述,在正则表达式中,以下字符“*?+.()[]{}\”具有特殊的含义。如果需要查找这些字符本身,可以在该字符前加一个反斜杠“\”。例如查“\def”可以输入“\\def”。

  三、使用实例

  如下模块代码功能是,删除首字符的空格,但是不删除中间空格。

  Sub 删除空格()
  Dim reg As Object ‘定义reg为一个对象
  Dim arr ‘定义一个动态数组
  Dim i As Long, j As Long ‘分别定义i,j为长整型
  i = Range(“A65536″).End(xlUp).Row ‘把A列非空的最后行数赋予给i
  Columns(“B”).ClearContents ‘清空B列
  arr = Range(“A1:A” & i) ‘把A列的数据赋予给数组arr
  Set reg = CreateObject(“VBscript.RegExp”) ‘调用正则表达式
  With reg ‘定义表达式
   .Global = True ‘匹配所有搜索项
   .ignorecase = True ‘不区分大小写
   .Pattern = “^ ” ‘正则表达式(首空格)
  End With
  For j = 1 To i ‘循环该区域
   Range(“B” & j) = reg.Replace(arr(j, 1), “”) ‘进行根据模板替换字符串为空值
  Next
  End Sub


该杂文来自: Excel杂文

上一篇:EXCEL VBA正则表达式的介绍及使用上篇

下一篇:设置Excel单元格金额小数点及使用逗号符号隔开的

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231 访问统计