Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1880|回复: 6

[已解决]正则中小括号的问题

[复制链接]
发表于 2013-9-16 23:03 | 显示全部楼层 |阅读模式
  Sub t343()
        Dim regex As New RegExp
        Dim sr, mat, m
        sr = "100980009579"
        With regex
          .Global = True
           .Pattern = "\d+(?=\9)\d" '查找任意多数字后的元,查找到后从元以前开始查找,查找和\d匹配的。
            Set mat = .Execute(sr)
            For Each m In mat
              Debug.Print m
            Next m
        End With
      End Sub
请教这个程序为什么不返回1009,80009,579三行结果呢?而返回100980009579呢?
最佳答案
2013-9-17 08:21
9在正则里没有特殊意义,所以不用转义符。

\d+,这是贪婪模式,在100980009579匹配时,会匹配到最后一个9时才结束,也就是10098000957,然后再\d后,就成了100980009579了。

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-9-16 23:07 | 显示全部楼层
回复

使用道具 举报

发表于 2013-9-17 08:14 | 显示全部楼层
回复

使用道具 举报

发表于 2013-9-17 08:18 | 显示全部楼层
  1. Sub t343()
  2.     Dim regex As Object, sr As String
  3.     Dim mat As Object, m As Object
  4.     Set regex = CreateObject("VBScript.regExp")
  5.     sr = "100980009579"
  6.     With regex
  7.         .Global = True
  8.         .Pattern = "[^9]+?(?=9)\d"    '查找任意多数字后的元,查找到后从元以前开始查找,查找和\d匹配的。
  9.         Set mat = .Execute(sr)
  10.         For Each m In mat
  11.             Debug.Print m
  12.         Next m
  13.     End With
  14. End Sub
复制代码
回复

使用道具 举报

发表于 2013-9-17 08:21 | 显示全部楼层    本楼为最佳答案   
9在正则里没有特殊意义,所以不用转义符。

\d+,这是贪婪模式,在100980009579匹配时,会匹配到最后一个9时才结束,也就是10098000957,然后再\d后,就成了100980009579了。

回复

使用道具 举报

发表于 2013-9-17 08:23 | 显示全部楼层
  1. [^9]+?9
复制代码
这样取巧也是可以的,开头不为9 ,结束为9.
回复

使用道具 举报

发表于 2013-9-17 09:07 | 显示全部楼层
  1. [^9]*9
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-28 16:22 , Processed in 4.703252 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表