Соответствуйте всем датам без звездочки перед - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь использовать отрицательный просмотр, чтобы сопоставить все даты без звездочки в

1 Ответ

0 голосов
/ 01 марта 2019

Как уже упоминалось в комментариях, VBA не поддерживает Lookbehinds.Чтобы обойти это, вы можете заменить свой Lookbehind следующим:

(?:^|[^*])

, а затем найти дату в группе захвата (под-совпадение) вместо полного соответствия.В этом случае ваша функция должна выглядеть примерно так:

Function lastFaxedDt(s As String) As Date
    Const sPat As String = _
        "(?:^|[^*])" & _
        "(\b(?:0[1-9]|1[0-2])/(?:0[1-9]|[12]\d|3[01])/(?:19\d{2}|[2-9]\d{3})\b)" & _
        "(?=.*?faxed)"
    Dim re As New RegExp, matches As MatchCollection
    With re
        .Pattern = sPat
        .IgnoreCase = True
        .Global = True
        Set matches = .Execute(s)
        If matches.Count > 0 Then
            Dim lastMatch As Match: Set lastMatch = matches(matches.Count - 1)
            lastFaxedDt = CDate(lastMatch.SubMatches.Item(0))
        Else
            ' TODO: handle the case where no matches are found
        End If
    End With
End Function

Использование:

Dim s As String
s = "02/02/2019 *03/20/2019 AB CART 9000341 FAXED TO INSTITUTION"
MsgBox lastFaxedDt(s) ' 02/02/2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...