【问题标题】:VBA Dynamic Regex Pattern Within "If"“如果”中的 VBA 动态正则表达式模式
【发布时间】:2017-06-06 15:38:49
【问题描述】:

我正在开发一种从文本中提取多种形式的参考编号的工具,并且我正在努力想出一种聪明的方法来迭代不同的 RegEx 模式。我所追求的示例类似于(我在花括号中所追求的伪代码):

Dim regEx as New RegExp
Dim someinput as String

regEx.Pattern = "201[67]\W?\d{6}"

If regEx.Test(someinput) = True Then
   foo
Elseif {with regEx.pattern="AB\W?\d{10}"  regEx.Test(someinput)} Then
   bar
...

这将是几个级别的深度,因为我们有大约十几种可能的格式要检查。目前我能想到的就是为每个定义一个新的正则表达式项,为每个设置模式,然后一个一个地运行 If->ElseIfs,但必须有更好的方法......我希望!

非常感谢

编辑只是为了抢占先机, foo 和 bar 会根据输入而有所不同,所以我不能只制作(例如)一组可能的模式并检查每个模式然后返回一个最终的“真/假”

【问题讨论】:

    标签: regex vba excel


    【解决方案1】:

    就个人而言,我会循环执行此操作:

    Dim regEx As New RegExp
    Dim someinput As String
    Dim patterns
    Dim i As Long
    Dim match As Long
    patterns = Array("201[67]\W?\d{6}", _
                     "AB\W?\d{10}")
    
    match = -1
    For i = LBound(patterns) To UBound(patterns)
        regEx.Pattern = patterns(i)
        If regEx.Test(someinput) Then
            match = i - LBound(patterns)  ' subtract the lower bound to force zero-base
            Exit For
        End If
    Next
    
    Select Case match
        Case 0: foo
        Case 1: bar
        Case Else: MsgBox "No match found"
    End Select
    

    【讨论】:

    • 完美!!感谢您的帮助:)
    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2013-10-07
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多