In Sätzen wie:
"[x] Alpha
[33] Beta "
Ich extrahiere ein Array von Daten in Klammern als ([x], [33])
Verwenden des VBA-Regex-Musters:
"(\[x\])|(\[\d*\])"
Ich kann das Array von Daten ohne Klammern nicht direkt als (x, 33) extrahieren.
Verwenden von Webressourcen-Ratschlägen für Muster
"(?<=\[)(.*?)(?=\])"
Ist dies ein VBA-spezifisches Problem (dh Einschränkungen bei der Implementierung von Regex) oder habe ich das Vorwärts- und Rückwärtsmuster falsch verstanden?
Public Function Regx( _
ByVal SourceString As String, _
ByVal Pattern As String, _
Optional ByVal IgnoreCase As Boolean = True, _
Optional ByVal MultiLine As Boolean = True, _
Optional ByVal MatchGlobal As Boolean = True) _
As Variant
Dim oMatch As Match
Dim arrMatches
Dim lngCount As Long
' Initialize to an empty array
arrMatches = Array()
With New RegExp
.MultiLine = MultiLine
.IgnoreCase = IgnoreCase
.Global = MatchGlobal
.Pattern = Pattern
For Each oMatch In .Execute(SourceString)
ReDim Preserve arrMatches(lngCount)
arrMatches(lngCount) = oMatch.Value
lngCount = lngCount + 1
Next
End With
Sub testabove()
Call Regx("[x] Alpha" & Chr(13) & _
"[33] Beta", "(\[x\])|(\[\d*\])")
End Sub
Verwenden Sie die Erfassung um die Untermuster, mit denen Sie den gewünschten Wert abrufen können.
Verwenden
"\[(x)\]|\[(\d*)\]"
(oder \d+
wenn Sie mit mindestens einer Ziffer übereinstimmen müssen, *
bedeutet dies null oder mehr Vorkommen und +
bedeutet ein oder mehrere Vorkommen ).
Oder verwenden Sie das generische Muster, um alles in den eckigen Klammern ohne die Klammern zu extrahieren :
"\[([^\][]+)]"
Submatches
Greifen Sie dann auf den richtigen Index zu, indem Sie die Submatch-Länge überprüfen (da Sie eine Alternative haben, ist jeder der Submatchs leer), und los geht's. Ändern Sie einfach Ihre for
Schleife mit
For Each oMatch In .Execute(SourceString)
ReDim Preserve arrMatches(lngCount)
If Len(oMatch.SubMatches(0)) > 0 Then
arrMatches(lngCount) = oMatch.SubMatches(0)
Else
arrMatches(lngCount) = oMatch.SubMatches(1)
End If
' Debug.Print arrMatches(lngCount) ' - This outputs x and 33 with your data
lngCount = lngCount + 1
Next
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen