可变长度的运算符

时间:2017-06-29 15:20:28

标签: regex vba excel-vba excel

我意识到这段代码并不是非常混乱,所以它可能没有必要,但是可以压缩这些行

Select Case True
    Case Info.Feed Like "F#" Or Info.Feed Like "F##" Or Info.Feed like "F###"
        'stuff; Info is a class variable
    Case Else
        'there are more cases but this is all I need to keep things clear
End Select

进入没有Or的东西?告诉Excel,当我说#时,这并不意味着一位数字?

3 个答案:

答案 0 :(得分:3)

Info.Feed like "F*" And isnumeric(mid(Info.Feed,2))

这会抓住

F01
F100
F99999 

但会忽略

F
FX
FX01
F01A
A01

如果要将其限制为F000到F999,请添加LEN

答案 1 :(得分:3)

如果您正在使用Like运算符并达到其限制,那么您可以非常简洁地在VBA中使用正则表达式。在您使用F*的情况下,我会假设您不需要FXXXF12X等。

F#,F ##和F ###都说F后跟1到3位数,可以在一个正则表达式中完成:

^F\d{1,3}$

哪个是字符串的开头,F,1-3个数字,字符串的结尾。

代码:

Option Explicit

Public Sub Test()

    Dim objRegex As Object
    Dim InfoFeed As String: InfoFeed = "F123x"

    Set objRegex = CreateObject("VBScript.RegExp")
    objRegex.Pattern = "^F\d{1,3}$"

    If objRegex.Test(InfoFeed) Then
        Debug.Print "Do stuff"
    Else
        Debug.Print "Do other stuff"
    End If

End Sub

答案 2 :(得分:1)

like "F*"或许可以使用AND len(x)<=4,或者只是left(info.feed,1)="F",如果它不依赖于长度。