我很难解决这个问题:
在VBA语法中有这个函数:
If Left("abcdef",3)="abc" then
Msgbox "True"
这个功能太简单了,但是有什么办法可以解决这个问题。
要有这样的东西
If left("abcdef",3) is in ["A".."Z"] or if left("1265avd0",2) is in [1..9]
这意味着检查等于left ("abcdef",3)
的{{1}}是否在此Interval [“A”..“Z”]中,或者检查"abc"
是数字且位于[1..9]
希望你能理解我想做的事情
有人可以点我这么做吗?
答案 0 :(得分:3)
您可以使用Like
运算符进行此简单比较。
Option Explicit
Option Compare Text 'for case insensitive matching
Sub dural()
Const S1 As String = "abcdef"
Const S2 As String = "1265avd0"
Debug.Print Left(S1, 3) Like "[A-Z][A-Z][A-Z]"
Debug.Print Left(S2, 2) Like "[1-9][1-9]"
End Sub
在这种情况下,两者都将返回TRUE
。
正如@chrisneilsen所指出的,比较可以简化为:
S1 Like "[A-Z][A-Z][A-Z]*"
S2 Like "[1-9][1-9]*"
您可以使用以下内容进行测试:
If Left(myString, 3) Like "[A-Z][A-Z][A-Z]" or _
Left(myString, 2) Like "[1-9][1-9]" then
'do something
End if
在简化版中:
If myString Like "[A-Z][A-Z][A-Z]*" or _
myString Like "[1-9][1-9]*" then
'do something
End if
使用正则表达式可以完成更复杂的模式匹配。
如果您不想设置Option Compare
,请将alpha模式更改为"[A-Za-z]"
答案 1 :(得分:2)
您可以使用正则表达式(" RegEx")。
该模式具有非捕获组(?:...)
,可以确定字符串^
的开头是否包含任何案例的三个字母:[a-zA-Z]{3}
或|
两个数字\d{2}
。
如果符合任一标准,则MsgBox
将返回 True ,否则返回 False 。
Sub test()
Dim RegEx As New RegExp, testString As String
testString = "53bcko390872"
With RegEx
.Pattern = "^(?:[a-zA-Z]{3}|\d{2})"
MsgBox .test(testString) 'will prompt True/False
End With
End Sub
您可以将MsgBox
行替换为有用的内容,例如
If .test(testString) [= True] Then...
Click Here ,了解正则表达式的实时演示(可选)。
注意您需要设置对
的引用Microsoft VBScript Regular Expressions x.x