Desen Eşleme için normal ifadeler kullanılır.
Excel'de kullanmak için şu adımları izleyin:
Adım 1 : VBA başvurusunu "Microsoft VBScript Regular Expressions 5.5" dosyasına ekleyin
- "Geliştirici" sekmesini seçin ( Bu sekmem yok ne yapmalıyım? )
- 'Kod' şerit bölümünden "Visual Basic" simgesini seçin
- "Uygulamalar için Microsoft Visual Basic" penceresinde, üst menüden "Araçlar" ı seçin.
- "Referanslar" ı seçin
- Çalışma kitabınıza eklemek için "Microsoft VBScript Regular Expressions 5.5" yanındaki kutuyu işaretleyin.
- "Tamam" ı tıklayın
Adım 2 : Deseninizi tanımlayın
Temel tanımlar:
-
Aralık.
- Örneğin
a-z
, a ile z arasındaki küçük harflerle eşleşir
- Örneğin
0-5
0 ile 5 arasında herhangi bir sayı ile eşleşir
[]
Bu parantez içindeki nesnelerden birini tam olarak eşleştirin.
- Örneğin
[a]
a harfi ile eşleşir
- Örneğin
[abc]
, a, b veya c olabilen tek bir harfle eşleşir
- Örneğin
[a-z]
, alfabenin küçük harfleriyle eşleşir.
()
Dönüş amaçları için farklı eşleşmeleri gruplandırır. Aşağıdaki örneklere bakın.
{}
Önceden tanımlanan desenin tekrarlanan kopyaları için çarpan.
- Örneğin,
[a]{2}
iki ardışık küçük a harfi ile eşleşir:aa
- Örneğin
[a]{1,3}
en az birini ve en fazla üç küçük harf maçları a
, aa
,aaa
+
Kendisinden önce tanımlanan desenin en az bir veya daha fazlasını eşleştirin.
- Örneğin
a+
maç olacak ardışık bir en a
, aa
, aaa
ve benzeri
?
Sıfır ya da kendisinden önce tanımlanan modellerden birini eşleştirin.
- Örneğin, Desen mevcut olabilir veya olmayabilir, ancak yalnızca bir kez eşleştirilebilir.
- Örneğin,
[a-z]?
boş dizeyle veya herhangi bir küçük harfle eşleşir.
*
Önceden tanımlanan desenin sıfırını veya daha fazlasını eşleştirin. - Örneğin, mevcut olan veya olmayan desen için joker karakter. - Örneğin, [a-z]*
boş dizeyle veya küçük harflerle dizeyle eşleşir.
.
Yeni satır dışındaki herhangi bir karakterle eşleşir \n
- Örn. İle
a.
başlayan ve dışındaki herhangi bir şeyle biten iki karakter dizesiyle eşleşir\n
|
VEYA operatör
- Örneğin,
a|b
aracı ya da a
ya dab
eşleştirilebilir eşleştirilebilir.
- Örn
red|white|orange
, renklerden biriyle tam olarak eşleşir.
^
Operatör
- Örneğin
[^0-9]
karakter bir sayı içeremez
- Örneğin
[^aA]
karakter küçük a
veya büyük harf olamazA
\
Aşağıdaki özel karakterden kaçar (yukarıdaki davranışı geçersiz kılar)
- Örneğin
\.
, \\
, \(
, \?
, \$
,\^
Ankraj Kalıpları:
^
Eşleşme dizenin başında gerçekleşmelidir
- Örneğin
^a
Birinci karakter küçük harf harf olmalıa
- Örneğin
^[0-9]
Birinci karakter bir sayı olmalıdır.
$
Eşleşme dizenin sonunda gerçekleşmelidir
- Örneğin,
a$
son karakter küçük harf olmalıdıra
Öncelik tablosu:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Önceden Tanımlanmış Karakter Kısaltmaları:
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
Örnek 1 : Makro olarak çalıştır
Aşağıdaki örnek makro A1
, ilk 1 veya 2 karakterin basamak olup olmadığını görmek için hücredeki değere bakar . Öyleyse, kaldırılır ve dizenin geri kalanı görüntülenir. Değilse, hiçbir eşleşme bulunmadığını bildiren bir kutu görünür. Hücre A1
değerleri 12abc
döndürülecek abc
, değeri döndürülecek , değeri 1abc
döndürülmeyecektir abc
, abc123
çünkü rakamlar dizenin başında değildi.
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
Örnek 2 : Hücre içi işlev olarak çalıştırma
Bu örnek, örnek 1 ile aynıdır, ancak hücre içi işlev olarak çalışacak şekilde ayarlanmıştır. Kullanmak için kodu şu şekilde değiştirin:
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
Dizelerinizi ("12abc") hücreye yerleştirin A1
. Bu formülü =simpleCellRegex(A1)
hücreye B1
girdiğinizde sonuç "abc" olur.
Örnek 3 : Döngü Aralığı
Bu örnek, örnek 1 ile aynıdır, ancak bir hücre aralığında dolaşır.
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
Örnek 4 : Farklı kalıpları ayırma
Bu örnek, bir aralık ( A1
, A2
& A3
) içinde dolaşır ve üç basamaktan sonra tek bir alfa karakteri ve ardından 4 sayısal basamaktan başlayan bir dize arar. Çıktı, model eşleşmelerini kullanarak bitişik hücrelere böler ()
. $1
ifadesi, ilk kümesinde eşleşen ilk deseni temsil eder ()
.
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
Sonuçlar:
Ek Kalıp Örnekleri
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