如何使用Like运算符检测1位或2位数字?
用Like运算符匹配1位或2位数字的正确方法
首先纠正你一个常见误区:Like运算符里的[0-99]写法是错误的。字符组[charlist]只能匹配单个字符,[0-99]等价于[0-9](重复的9没有意义),所以它只能匹配1位数字,自然无法匹配12这种两位数。
基础场景:匹配固定位置的1/2位数字
要匹配0-99范围内的数字(即1位或2位数字),Like的正确写法是结合#(匹配单个数字)和OR逻辑:
- 匹配"ab"后接1位数字+cd:
str Like "ab#cd" - 匹配"ab"后接2位数字+cd:
str Like "ab##cd" - 合并两种情况:
str Like "ab#cd" OR str Like "ab##cd"
复杂场景:多段1/2位数字的匹配
针对你给出的Local_Buffer.O[3].7这类字符串,要匹配O[X].Y中X和Y都是1/2位数字的情况,由于Like运算符不支持分组或交替语法,确实无法用单一模式覆盖所有可能,但可以优化冗余的OR写法:
str = "Local_Buffer.O[3].7" ' 分组合并相同前缀的模式,提升可读性 Dim matchX1 As Boolean, matchX2 As Boolean matchX1 = str Like "*.O[[]#[]].#" OR str Like "*.O[[]#[]].##" matchX2 = str Like "*.O[[]##[]].#" OR str Like "*.O[[]##[]].##" Debug.Print matchX1 OR matchX2
或者追求简洁的写法:
Debug.Print (str Like "*.O[[]#[]].#*" And str Like "*.O[[]#[]].*[0-9]") OR _ (str Like "*.O[[]##[]].#*" And str Like "*.O[[]##[]].*[0-9]")
不过这种写法可读性稍差,不如分组逻辑清晰。
补充说明
如果你的场景允许使用正则表达式(VBA中需引用Microsoft VBScript Regular Expressions 5.5),可以用更简洁的模式^.*\[(\d{1,2})\]\.(\d{1,2})$来匹配,不过这已经超出Like运算符的范畴了。
内容的提问来源于stack exchange,提问作者Nick Roe
相关产品推荐
相关产品推荐

