Le espressioni regolari vengono utilizzate per la corrispondenza dei modelli.
Per utilizzare in Excel attenersi alla seguente procedura:
Passaggio 1 : aggiungi il riferimento VBA a "Microsoft VBScript Regular Expressions 5.5"
- Seleziona la scheda "Sviluppatore" ( Non ho questa scheda cosa devo fare? )
- Selezionare l'icona "Visual Basic" dalla sezione della barra multifunzione "Codice"
- Nella finestra "Microsoft Visual Basic, Applications Edition" selezionare "Strumenti" dal menu in alto.
- Seleziona "Riferimenti"
- Seleziona la casella accanto a "Microsoft VBScript Regular Expressions 5.5" da includere nella cartella di lavoro.
- Fai clic su "OK"
Passaggio 2 : definire il modello
Definizioni di base:
-
Gamma.
- Ad esempio,
a-z
corrisponde a lettere minuscole dalla a alla z
- Ad esempio,
0-5
corrisponde a qualsiasi numero compreso tra 0 e 5
[]
Abbina esattamente uno degli oggetti all'interno di queste parentesi.
- Ad esempio
[a]
corrisponde alla lettera a
- Ad esempio,
[abc]
corrisponde a una singola lettera che può essere a, b o c
- Ad esempio,
[a-z]
corrisponde a qualsiasi singola lettera minuscola dell'alfabeto.
()
Raggruppa partite diverse a scopo di restituzione. Vedi esempi di seguito.
{}
Moltiplicatore per copie ripetute del modello definito prima.
- Ad esempio,
[a]{2}
corrisponde a due lettere consecutive minuscole a:aa
- Ad esempio,
[a]{1,3}
corrisponde ad almeno uno e fino a tre lettera minuscola a
, aa
,aaa
+
Abbina almeno uno, o più, del modello definito prima di esso.
- Ad esempio,
a+
corrisponderà consecutivo una di a
, aa
, aaa
e così via
?
Abbina zero o uno dei pattern definiti prima.
- Ad esempio, il modello può essere presente o meno, ma può essere associato solo una volta.
- Ad esempio,
[a-z]?
corrisponde a una stringa vuota o a una singola lettera minuscola.
*
Corrisponde a zero o più del modello definito prima. - Ad esempio, carattere jolly per motivi che potrebbero essere presenti o meno. - Ad esempio, [a-z]*
corrisponde a una stringa vuota o una stringa di lettere minuscole.
.
Corrisponde a qualsiasi personaggio tranne Newline \n
- Ad esempio
a.
Corrisponde a una stringa di due caratteri che inizia con a e termina con qualsiasi cosa tranne\n
|
Operatore OR
- Ad esempio
a|b
significa che a
o b
può essere abbinato.
- Ad esempio,
red|white|orange
corrisponde esattamente a uno dei colori.
^
NON operatore
- Ad esempio, il
[^0-9]
carattere non può contenere un numero
- Ad esempio, il
[^aA]
carattere non può essere in minuscolo a
o maiuscoloA
\
Sfugge al carattere speciale che segue (ignora il comportamento sopra)
- Ad esempio
\.
, \\
, \(
, \?
, \$
,\^
Schemi di ancoraggio:
^
La corrispondenza deve verificarsi all'inizio della stringa
- Ad esempio, il
^a
primo carattere deve essere una lettera minuscolaa
- Ad esempio, il
^[0-9]
primo carattere deve essere un numero.
$
La corrispondenza deve avvenire alla fine della stringa
- Ad esempio, l'
a$
ultimo carattere deve essere una lettera minuscolaa
Tabella di precedenza:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Abbreviazioni di caratteri predefinite:
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
Esempio 1 : Esegui come macro
La seguente macro di esempio esamina il valore nella cella A1
per vedere se i primi 1 o 2 caratteri sono cifre. In tal caso, vengono rimossi e viene visualizzato il resto della stringa. In caso contrario, viene visualizzata una finestra in cui viene indicato che non è stata trovata alcuna corrispondenza. I A1
valori delle celle di 12abc
restituiranno abc
, il valore di 1abc
restituirà abc
, il valore di abc123
restituirà "Non abbinato" perché le cifre non erano all'inizio della stringa.
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
Esempio 2 : Esegui come funzione nella cella
Questo esempio è uguale all'esempio 1 ma è configurato per essere eseguito come una funzione in-cell. Per usare, cambia il codice in questo:
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
Posiziona le stringhe ("12abc") nella cella A1
. Inserisci questa formula =simpleCellRegex(A1)
nella cella B1
e il risultato sarà "abc".
Esempio 3 : Loop Through Range
Questo esempio è uguale all'esempio 1 ma scorre in un intervallo di celle.
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
Esempio 4 : dividere modelli diversi
Questo esempio scorre in un intervallo ( A1
, A2
& A3
) e cerca una stringa che inizia con tre cifre seguite da un singolo carattere alfa e quindi da 4 cifre numeriche. L'output divide le corrispondenze del modello in celle adiacenti utilizzando il ()
. $1
rappresenta il primo modello corrispondente all'interno del primo set di ()
.
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
risultati:
Esempi di pattern aggiuntivi
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