正则表达式无法在VBA中正常工作

时间:2018-12-20 03:26:47

标签: regex excel vba excel-vba

问题是,我正在尝试创建一个模式,如果字符串中除了模式所检查的内容之外的任何内容,都将返回false。我是使用正则表达式的新手,我相信应该通过将整个模式放在“ ^”和“ $”之间来实现,但这对我的代码不起作用。

Sub Macro1()
    Dim cellValue As String
    cellValue = "7:11 AM NBR Unavail"

    Dim callPattern As String
    callPattern = "^[1]{0,1}[1-9][:][0-9]{2}[ ]AM|PM$"

    Dim regEx As New RegExp

    With regEx
        .IgnoreCase = False
        .Pattern = callPattern
    End With

    If regEx.Test(cellValue) Then
        MsgBox ("Got it!")
    Else
        MsgBox ("Don't got it...")
    End If
End Sub

如您所见,变量cellValue在模式检查的AM | PM之后有文本,但是当我运行它时,我仍然得到“知道了!”消息,我不确定为什么会这样。我之前在尝试以下字符串和模式,并且最后的“ $”按预期工作,所以为什么不能与上面的代码一起工作?

cellValue = "7:11 PM (555) 444-3333"
callPattern = "^[1]{0,1}[1-9][:][0-9]{2}[ ]AM|PM[ ][(][0-9]{3}[)][ ][0-9]{3}[-][0-9]{4}$"

2 个答案:

答案 0 :(得分:2)

我认为您必须在AM | PM之间加上括号,如下所示。 callPattern = "^[1]{0,1}[1-9][:][0-9]{2}[ ](AM|PM)$"

您的模式意味着 “ ^ [1] {0,1} [1-9] [:] [0-9] {2} [] AM”或“ PM $”

第二种方式也意味着 “ ^ [1] {0,1} [1-9] [:] [0-9] {2} [] AM”或“ PM [] [(] [0-9] {3} [)] [ ] [0-9] {3} [-] [0-9] {4} $”

答案 1 :(得分:0)

您可以将模式缩减为:

^1?[1-9]:\d{2} (AM|PM) \(\d{3}\) \d{3}-\d{4}$

Test it here