Reguläre Ausdrücke werden für die Musterübereinstimmung verwendet.
Gehen Sie folgendermaßen vor, um Excel zu verwenden:
Schritt 1 : Fügen Sie einen VBA-Verweis auf "Microsoft VBScript Regular Expressions 5.5" hinzu.
- Wählen Sie die Registerkarte "Entwickler" ( Ich habe diese Registerkarte nicht, was mache ich? )
- Wählen Sie das Symbol "Visual Basic" aus dem Abschnitt "Code"
- Wählen Sie im Fenster "Microsoft Visual Basic für Applikationen" im oberen Menü "Extras".
- Wählen Sie "Referenzen"
- Aktivieren Sie das Kontrollkästchen neben "Microsoft VBScript Regular Expressions 5.5", um es in Ihre Arbeitsmappe aufzunehmen.
- OK klicken"
Schritt 2 : Definieren Sie Ihr Muster
Grundlegende Definitionen:
-
Angebot.
- ZB
a-z
entspricht Kleinbuchstaben von a bis z
- ZB
0-5
entspricht eine beliebige Zahl von 0 bis 5
[]
Passen Sie genau eines der Objekte in diesen Klammern an.
- ZB
[a]
passt der Buchstabe a
- ZB
[abc]
entspricht ein einzelner Buchstabe, der a, b oder c sein kann
- ZB
[a-z]
passt zu einem einzelnen Kleinbuchstaben des Alphabets.
()
Gruppiert verschiedene Übereinstimmungen für Rückgabezwecke. Siehe Beispiele unten.
{}
Multiplikator für wiederholte Kopien des zuvor definierten Musters.
- ZB
[a]{2}
passt zwei aufeinanderfolgende Kleinbuchstaben a:aa
- Zum Beispiel
[a]{1,3}
entspricht mindestens einem und bis zu drei Kleinbuchstaben a
, aa
,aaa
+
Passen Sie mindestens eines oder mehrere der zuvor definierten Muster an.
- Zum Beispiel
a+
wird in Folge eine der übereinstimmen a
, aa
, aaa
, und so weiter
?
Passen Sie Null oder eines der zuvor definierten Muster an.
- ZB kann ein Muster vorhanden sein oder nicht, es kann jedoch nur einmal abgeglichen werden.
- ZB
[a-z]?
passt eine leere Zeichenfolge oder ein einzelner Kleinbuchstabe zusammen.
*
Passen Sie null oder mehr des zuvor definierten Musters an. - ZB Platzhalter für Muster, die vorhanden sein können oder nicht. - ZB [a-z]*
entspricht eine leere Zeichenfolge oder eine Zeichenfolge aus Kleinbuchstaben.
.
Entspricht jedem Zeichen außer Zeilenumbruch \n
- ZB
a.
Entspricht einer zweistelligen Zeichenfolge, die mit a beginnt und mit etwas anderem endet\n
|
ODER-Operator
- ZB
a|b
bedeutet entweder a
oder b
kann angepasst werden.
- ZB
red|white|orange
passt genau eine der Farben.
^
NICHT Betreiber
- ZB
[^0-9]
Zeichen darf keine Zahl enthalten
- ZB
[^aA]
kann ein Zeichen nicht in Klein- a
oder Großbuchstaben geschrieben werdenA
\
Entgeht dem folgenden Sonderzeichen (überschreibt das obige Verhalten)
- Zum Beispiel
\.
, \\
, \(
, \?
, \$
,\^
Verankerungsmuster:
^
Die Übereinstimmung muss am Anfang der Zeichenfolge erfolgen
- ZB Das
^a
erste Zeichen muss ein Kleinbuchstabe seina
- ZB Das
^[0-9]
erste Zeichen muss eine Zahl sein.
$
Die Übereinstimmung muss am Ende der Zeichenfolge erfolgen
- ZB Das
a$
letzte Zeichen muss ein Kleinbuchstabe seina
Rangfolge:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Vordefinierte Zeichenabkürzungen:
abr same as meaning
\d [0-9] Any single digit
\D [^0-9] Any single character that's not a digit
\w [a-zA-Z0-9_] Any word character
\W [^a-zA-Z0-9_] Any non-word character
\s [ \r\t\n\f] Any space character
\S [^ \r\t\n\f] Any non-space character
\n [\n] New line
Beispiel 1 : Als Makro ausführen
Das folgende Beispielmakro untersucht den Wert in der Zelle, A1
um festzustellen, ob die ersten 1 oder 2 Zeichen Ziffern sind. In diesem Fall werden sie entfernt und der Rest der Zeichenfolge wird angezeigt. Wenn nicht, wird ein Feld angezeigt, das Sie darüber informiert, dass keine Übereinstimmung gefunden wurde. Die A1
Zellenwerte von 12abc
werden zurückgegeben abc
, der Wert von 1abc
wird zurückgegeben abc
, der Wert von abc123
wird "Nicht übereinstimmend" zurückgeben, da die Ziffern nicht am Anfang der Zeichenfolge standen.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1")
If strPattern <> "" Then
strInput = Myrange.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
End Sub
Beispiel 2 : Als In-Cell-Funktion ausführen
Dieses Beispiel ist dasselbe wie in Beispiel 1, ist jedoch so eingerichtet, dass es als In-Cell-Funktion ausgeführt wird. Ändern Sie zur Verwendung den Code wie folgt:
Function simpleCellRegex(Myrange As Range) As String
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String
strPattern = "^[0-9]{1,3}"
If strPattern <> "" Then
strInput = Myrange.Value
strReplace = ""
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
simpleCellRegex = regEx.Replace(strInput, strReplace)
Else
simpleCellRegex = "Not matched"
End If
End If
End Function
Platziere deine Saiten ("12abc") in der Zelle A1
. Geben Sie diese Formel =simpleCellRegex(A1)
in die Zelle ein B1
und das Ergebnis ist "abc".
Beispiel 3 : Durchschleifbereich
Dieses Beispiel ist dasselbe wie in Beispiel 1, durchläuft jedoch eine Reihe von Zellen.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A5")
For Each cell In Myrange
If strPattern <> "" Then
strInput = cell.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
Next
End Sub
Beispiel 4 : Aufteilen verschiedener Muster
In diesem Beispiel wird ein Bereich ( A1
, A2
& A3
) durchlaufen und nach einer Zeichenfolge gesucht, die mit drei Ziffern beginnt, gefolgt von einem einzelnen Alpha-Zeichen und vier numerischen Ziffern. Die Ausgabe teilt die Musterübereinstimmungen unter Verwendung von in benachbarte Zellen auf ()
. $1
stellt das erste Muster dar, das innerhalb des ersten Satzes von übereinstimmt ()
.
Private Sub splitUpRegexPattern()
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A3")
For Each C In Myrange
strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"
If strPattern <> "" Then
strInput = C.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
C.Offset(0, 1) = regEx.Replace(strInput, "$1")
C.Offset(0, 2) = regEx.Replace(strInput, "$2")
C.Offset(0, 3) = regEx.Replace(strInput, "$3")
Else
C.Offset(0, 1) = "(Not matched)"
End If
End If
Next
End Sub
Ergebnisse:
Zusätzliche Musterbeispiele
String Regex Pattern Explanation
a1aaa [a-zA-Z][0-9][a-zA-Z]{3} Single alpha, single digit, three alpha characters
a1aaa [a-zA-Z]?[0-9][a-zA-Z]{3} May or may not have preceding alpha character
a1aaa [a-zA-Z][0-9][a-zA-Z]{0,3} Single alpha, single digit, 0 to 3 alpha characters
a1aaa [a-zA-Z][0-9][a-zA-Z]* Single alpha, single digit, followed by any number of alpha characters
</i8> \<\/[a-zA-Z][0-9]\> Exact non-word character except any single alpha followed by any single digit