Regex 如何在VBA字符串中找到字母和数字的组合?

Regex 如何在VBA字符串中找到字母和数字的组合?,regex,string,vba,Regex,String,Vba,我想检查一下是否和InStr在一起?可以找到单个字母和数字的组合。特别是,信函只能是: R或B或G或Y 而数字可以从1到9 Examples given: R1 is legal Y6 is legal A2 is not legal G10 is not legal 在该字符串中,只能找到该组合的一个实例,并且在开始处用下划线u标记。也可能出现这种组合不存在的情况 我想避免这种琐碎的解决方案,因为它会带来大量的计算,而在我的一系列Or或一个非常长的Select案例的程序中,我并不需要这些计

我想检查一下是否和InStr在一起?可以找到单个字母和数字的组合。特别是,信函只能是:

R或B或G或Y

而数字可以从1到9

Examples given:

R1 is legal
Y6 is legal
A2 is not legal
G10 is not legal
在该字符串中,只能找到该组合的一个实例,并且在开始处用下划线u标记。也可能出现这种组合不存在的情况

我想避免这种琐碎的解决方案,因为它会带来大量的计算,而在我的一系列Or或一个非常长的Select案例的程序中,我并不需要这些计算


这里有没有使用自定义变量或通配符的方法?

您可以使用正则表达式来获取所需的值:

_([YRGB]\d)(?!\d)
在这里,u将找到一个下划线,然后[YRGB]\d将匹配并捕获[YRGB]字符类Y、R、G或B中的一个字母,以及任何未后跟另一个数字的数字\d\d是一个负前瞻,如果当前位置右侧有一个数字,则匹配将失败

或者使用单词边界\b,它将需要字母/数字以外的字符或结尾数字后面的字符:

_([YRGB]\d)\b
看。结果是将子字符串捕获到组1中

VBA代码示例:

Sub DemoFn()
Dim re As RegExp
Dim s As String, res As String
Dim colMatch As MatchCollection, objMatch As Match

s = "blahblahblah_R1.blah"
Set re = New RegExp
With re
  .pattern = "_([YRGB]\d)(?!\d)"
  .Global = False
  .MultiLine = False
End With

Set colMatch = re.Execute(s)
For Each objMatch In colMatch
  res = objMatch.SubMatches.Item(0)
Next
Debug.Print res
End Sub

您可以尝试使用类似VBA的运算符:

Sub PatternMatching
    If (("G6" Like "[YRGB][1-9]") = True) Then
        Msgbox("this is a match")
    End If
End Sub

使用正则表达式,它适合您的案例护理来详细阐述一下?我不知道这是什么意思,你是说你有一个像我有R1和G9以及R101和A2222子字符串的字符串,你想接收一个只包含R1和G9的集合/数组吗?或者,如果字符串包含您的模式,则只返回True/False?对于RegEx,您可以查看以下帖子:您还可以使用Like运算符对ex进行求值。yourValue Like u[RBGY]