2012-02-05 8 views
12

Czy istnieje sposób na negatywny i pozytywny lookbehind w regex VBA?Lookbehind w regex dla VBA?

Nie chcę się dopasowywać, jeśli ciąg zaczyna się od "A", więc obecnie robię^A na początku wzorca, a następnie usuwam pierwszy znak dopasowania (0). Oczywiście nie najlepsza metoda!

Używam obiektu regExp.

+0

Zakładam, że używasz [RegExp ] (http://msdn.microsoft.com/en-us/library/ms974570.aspx) obiekt? –

+0

@RobertHarvey Tak, jestem :) – rikAtee

Odpowiedz

9

VBA oferuje pozytywne i negatywne uprzedzenia, ale raczej niekonsekwentnie nie wygląda.

Najlepszym przykładem przy użyciu regex z VBA, które widziałem jest this article Patrick Matthews

[Aktualizacja przykład stosując Execute zamiast Replace]

Choć nie jestem całkowicie jasne od użytkowania ty może korzystać z funkcji takich jak ten z

  • pomija żadnych słów od a
  • wszystkich słów nie wychodząc z zwraca wszystko z drugiego znaku na (za pomocą submatch - wzór wewnątrz ( i ) jest submatch 1 -

    Sub TestString() 
    MsgBox ReducedText("cfat dcat") 
    MsgBox ReducedText("Sat all over the hat again") 
    End Sub 
    
    
    Function ReducedText(strIn As String) As String 
    Dim objRegex As Object 
    Dim objRegMC As Object 
    Dim objRegM As Object 
    Dim strOut As String 
    Set objRegex = CreateObject("vbscript.regexp") 
    With objRegex 
        .IgnoreCase = True 
        'not needed if matching the whole string 
        .Global = True 
        .Pattern = "\b[^a\s]([a-z]+)" 
        If .test(strIn) Then 
         Set objRegMC = .Execute(strIn) 
         For Each objRegM In objRegMC 
         strOut = strOut & objRegM.submatches(0) & vbNewLine 
         Next 
         ReducedText = strOut 
        Else 
        ReducedText = "Starts with A" 
        End If 
    End With 
    End Function 
    
+1

to świetnie, dzięki. – rikAtee

0

Co powiesz na umieszczenie^A w niezapisanej grupie i użycie właściwości SubMatches obiektu Dopasuj, aby uzyskać dopasowaną wartość?

+0

To brzmi interesująco. Jak korzystać z submatchów? – rikAtee