Kurs
Farklı biçimlerdeki telefon numaraları listesini hiç standartlaştırmanız gerekti mi? Ya da serbest metin alanlarından anahtar kelimeler çıkarmak? Karşınızda: RegEx! RegEx, yani Düzenli İfadeler, metin blokları içindeki dizeleri eşleştirmek için kullanılan güçlü ve esnek kalıplardır. Bu yazıda yaygın regex sözdiziminden, Excel'de regex'i nasıl etkinleştireceğinizden ve son olarak onları etkili bir şekilde nasıl kullanacağınızdan bahsedeceğiz.
Düzenli İfadeler nedir?
Sıklıkla "regex" veya "regexp" olarak kısaltılan düzenli ifadeler, arama kalıbını tanımlamanın bir yoludur ve bu kalıp; arama, ayrıştırma ve/veya metni değiştirme gibi çeşitli metin işleme görevlerinde kullanılabilir. Düzenli ifadeler, desen eşleştirme içeren görevler için programlama dillerinde, metin düzenleyicilerde ve diğer yazılımlarda yaygın olarak kullanılır. Excel'deki regex türü ya da sözdizimi, .NET düzenli ifade motoruna dayanır.
Yaygın Düzenli İfadeler
Düzenli ifadeler, onları tanımlayan özelliklere göre gruplandırılabilir. Aşağıda karşılaşacağınız yaygın düzenli ifadeler yer alıyor.
Yazılı (literal) karakterler
Düzenli ifadeler, kendileriyle birebir eşleşen yazılı karakterler içerebilir. Örneğin, "hello" regex'i, tam olarak "hello" dizgesiyle eşleşir.
Metakarakterler
Düzenli ifadeler ayrıca özel anlamları olan metakarakterler de içerir. Bazı yaygın metakarakterler şunlardır:
.(nokta): Satır sonu dışında herhangi bir tek karakterle eşleşir.*: Önceki karakterin veya grubun sıfır ya da daha fazla tekrarını eşleştirir.+: Önceki karakterin veya grubun bir ya da daha fazla tekrarını eşleştirir.?: Önceki karakterin veya grubun sıfır ya da bir tekrarını eşleştirir.|(dikey çizgi): Mantıksal VEYA gibi davranır ve alternatifler belirtmenize olanak tanır.()(parantez): Karakterleri veya alt kalıpları birlikte gruplar.[](köşeli parantez): Bir karakter sınıfı tanımlar; belirtilen karakter kümesinden herhangi bir karakterle eşleşmenizi sağlar.^(şapka): Bir satırın veya dizgenin başlangıcıyla eşleşir.$: Bir satırın veya dizgenin sonuyla eşleşir.\(ters eğik çizgi): Bir metakarakteri kaçışlayarak onu harfiyen eşleştirir.
Karakter sınıfları
Düzenli ifadelerdeki (regex) karakter sınıfları, bir karakter kümesi içinden herhangi birini eşleştirmenizi sağlayan özel gösterimlerdir. Belirli bir karakter grubunu kısaca belirtme imkânı sağlayarak regex kalıplarını sadeleştirirler. Karakter sınıflarını tanımlamak için [...] köşeli parantezleri kullanabilirsiniz. Örneğin, [aeiou] herhangi bir sesli harfle eşleşir. [A-Z] herhangi bir büyük harfle eşleşir.
Nicelik belirteçleri (quantifier)
Nicelik belirteçleri, hedef dizgede belirli bir kalıp, karakter veya karakter sınıfının eşleşme için kaç kez geçmesi gerektiğini belirtir. Başka bir deyişle, bir karakterin veya grubun kaç kez tekrar edileceğini tanımlarlar. Örneğin, a{3} art arda tam üç "a" karakteriyle eşleşir. ab? "a" ya da "ab" ile eşleşir.
Çapalar (anchors)
Çapalar, dizgedeki herhangi bir karakterle değil, karakterlerden önce, sonra veya aralarındaki bir konumla eşleşen özel karakterlerdir. Kalıbın metnin belirli bir yerinde meydana gelmesini sağlamak için kullanılırlar. Örneğin, ^ kalıbı dizgenin başına, $ ise sonuna sabitler.
Değiştirici (modifier)
Değiştiriciler, regex motorunun kalıbı nasıl yorumladığını değiştiren karakterlerdir. Eşleştirme davranışını ayarlamak için kullanılır; böylece daha fazla esneklik ve kontrol sağlarlar. Büyük/küçük harf duyarlılığı, çok satırlı eşleştirme ve özel karakterlerin nasıl yorumlandığı gibi çeşitli yönleri etkileyebilirler. Örneğin, i kalıbı büyük/küçük harfe duyarsız hale getirir, g ise genel (global) yapar; yani girdideki tüm eşleşmeleri yakalar.
Excel'de Düzenli İfadelerin Kullanım Alanları
RegEx çeşitli senaryolarda işe yarar:
Veri doğrulama
Çoğu durumda, doğru bilgilere baktığınızdan emin olmak için verileri doğrulamanız gerekir. Klasik bir örnek telefon numaralarıdır. ABD'de standart biçim (###) ###-####'dir. Ancak şu şekilde de yazılabilirler: ###-###-####, (+#) ### ### ####, ########## vb. RegEx, dosyada yer alan bilginin gerçekten telefon numarası olup olmadığını belirlemeye yardımcı olabilir. Aşağıdaki düzenli ifade, isteğe bağlı 1 ila 2 haneli bir ülke koduyla birlikte 10 haneli telefon numaralarında eşleşme döndürür: (\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$.
Metin çıkarma
Uzun cümleler, geleneksel bir elektronik tablo yazılımı tarafından çoğu zaman zor ayrıştırılır. Belirli anahtar kelimeleri çıkarmak için RegEx kullanabilirsiniz. Örneğin, bir röportaj dökümünde tek tırnak işaretleri içine alınmış kitap adlarını çıkarmak için şu düzenli ifadeyi kullanabiliriz: '(.*?)'.
Metin dönüştürme
Bilgi çıkarmanın yanı sıra, raporlama amacıyla veriyi dönüştürüp standartlaştırabilirsiniz. Diyelim ki ABD posta kodlarının ilk beş rakamını çıkarmakla ilgileniyoruz. Posta kodu içeren bir alandaki tüm örnekleri ^\d{5} düzenli ifadesini kullanarak değiştirebiliriz.
Tokenleştirme
Tokenleştirme, metni tek tek belirteçlere veya kelimelere bölme işlemidir. Metni tokenleştirmek için kurallar tanımlamak üzere regex kalıpları kullanılabilir. Örneğin, boşluk karakterlerinde bölmek için \s+ veya noktalama gibi kelime olmayan karakterlerde bölmek için \W+ kullanabilirsiniz.
Ek kalıplar hakkında bilgi için Python'da Düzenli İfadeler kopya kılavuzumuza göz atın.
Excel'de RegEx Kullanma
Excel yerel olarak RegEx'i desteklemese de, Windows için bir VBA betiğiyle kendi özel tanımınızı yazarak (Windows) veya eklentileri etkinleştirerek (Mac) bunu kullanabilir hale getirebilirsiniz. Excel'de bir sütundan metin çıkarmak için bir regex işlevini nasıl etkinleştireceğimizi adım adım inceleyelim.
Windows için
Başlamak için Alt+F11 tuşlarına basarak Visual Basic Düzenleyicisi'ni açın. Ayrıca Araçlar > Makro > Visual Basic Düzenleyicisi yoluyla da gidebilirsiniz. Ardından, Ekle > Modül tıklayın.
Aşağıdaki işlevi modüle yapıştırın:
Public Function CustomRegExpExtract(inputText As String, regexPattern As String, Optional instanceNumber As Integer = 0, Optional matchCase As Boolean = True) As Variant
Dim textMatches() As String
Dim matchesIndex As Integer
Dim regex As Object
Dim matches As Object
On Error GoTo ErrHandler
CustomRegExpExtract = ""
' Create a regular expression object
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = regexPattern
regex.Global = True
regex.MultiLine = True
' Set case sensitivity
If matchCase Then
regex.IgnoreCase = False
Else
regex.IgnoreCase = True
End If
' Execute the regex pattern on the input text
Set matches = regex.Execute(inputText)
If matches.Count > 0 Then
If instanceNumber = 0 Then
' If instanceNumber is 0, return all matches in an array
ReDim textMatches(matches.Count - 1, 0)
For matchesIndex = 0 To matches.Count - 1
textMatches(matchesIndex, 0) = matches.Item(matchesIndex)
Next matchesIndex
CustomRegExpExtract = textMatches
Else
' If instanceNumber is specified, return the match at that instance
CustomRegExpExtract = matches.Item(instanceNumber - 1)
End If
End If
Exit Function
ErrHandler:
' Handle errors by returning an error value
CustomRegExpExtract = CVErr(xlErrValue)
End Function
' Modified from an original script by Patrick Matthews
İşlevi kaydedin ve çalışma sayfasına geri dönün. Şimdi, çalışma kitabını .xlsm dosya uzantısıyla makro özellikli olarak kaydedin.
Excel Çalışma Sayfasında İşlevi Kullanma
Excel çalışma kitabınızda makroları etkinleştirerek, artık CustomRegExpExtract işlevini Excel'deki normal bir işlev gibi kullanarak karmaşık dize kalıplarını ayrıştırabilirsiniz; burada:
inputTextayrıştırılacak özgün dizgedir;
regexPatterninputText'i ayrıştırmak için kullanılan düzenli ifade kalıbıdır;
instanceNumbervarsayılan olarak kalıbın tüm örneklerini döndürür, ancak döndürülecek örnek sayısını belirtmek için bir tamsayı girilebilir; ve
matchCaseeşleştirme sırasında metnin büyük/küçük harf durumunun dikkate alınıp alınmayacağını (TRUE veya boş bırakılırsa) ya da yok sayılacağını (FALSE) belirtir.
Diyelim ki bir alandan telefon numaralarını çıkarmak istiyoruz. Regex kalıbını herhangi bir hücreye yazabiliriz (aşağıdaki durumda A2 hücresinde görünüyor). A6 hücresinde serbest biçimli dizgeniz örnek olarak "Sophia, 1111111111" bulunuyor. B6 hücresine =CustomRegExpExtract(A6,$A$2) yazıyoruz. İşlev, A2 hücresindeki regex kalıbına göre dizgeyi eşleştirerek telefon numarasını çıkarır ve beklendiği gibi "1111111111" döndürür.

Mac OS için
Ne yazık ki Mac OS, MS VBScript Regular Expressions 5.5 kitaplığını tanımaz. Mac'te Excel'de karmaşık desen eşleştirmeyi etkinleştirmek için iki seçenek vardır: gelişmiş filtreleri kullanmak veya paketler kurmak.

Gelişmiş filtreleri kullanma
Excel'deki gelişmiş filtreler, birden çok ölçüte dayalı karmaşık veri filtreleme işlemlerini gerçekleştirmenize yardımcı olur. Bu özellik özellikle büyük veri kümeleriyle çalışırken faydalıdır. Excel'de gelişmiş filtrelerin nasıl kullanılacağına bakalım:
- Verilerinizi hazırlayın: Verinizin, net başlıkların bulunduğu tablo benzeri bir biçimde olduğundan emin olun.
- Ölçüt Aralığı (Criteria Range) oluşturun: Çalışma sayfanızda filtreleme ölçütlerini tanımlamak için ayrı bir alan oluşturun. Bu alan, filtrelemek istediğiniz sütunlarla aynı başlıklara sahip olmalıdır. Bu başlıkların altına filtreleme ölçütlerini belirtin. Aynı başlık altında birden çok ölçüt girerek "VEYA" mantığı kurabilir veya ayrı satırlarda girerek "VE" mantığı oluşturabilirsiniz.
- Veriyi seçin: Veri kümeniz içindeki bir hücreye tıklayın ya da filtrelemek istediğiniz tüm aralığı seçin.
- Filtreyi ayarlayın: Excel şeridindeki Veri sekmesine tıklayın ve Gelişmiş Filtre seçeneğine gidin. Sırala ve Filtre Uygula grubunda Gelişmiş'i tıklayın. Gelişmiş Filtre iletişim kutusunda, listeyi yerinde mi filtrelemek istediğinizi yoksa sonuçları başka bir konuma mı kopyalamak istediğinizi seçin. Liste aralığını (veriniz) belirtin. Ölçüt aralığını (filtreleme koşullarını belirlediğiniz yer) belirtin. Filtreyi uygulamak için Tamam'a tıklayın.
Diyelim ki Ad, Yaş, Şehir sütunlarından oluşan bir veri kümeniz var. New York'ta 30 yaş üstü olanları veya Los Angeles'taki herkesi gösterecek şekilde filtrelemek istiyorsunuz. Ölçüt aralığınız şöyle görünebilir:
|
Name |
Age |
City |
|
>30 |
New York |
|
|
Los Angeles |
Eklenti yükleme
- Kutools for Excel: Kutools, regex kullanarak verileri bulma ve değiştirme özelliği de dahil olmak üzere birçok işlev içeren kapsamlı bir eklentidir. Excel şeridine regex işlevleri de dâhil geniş bir araç yelpazesi sunan yeni bir sekme ekler.
- RegEx Find/Replace: Bu eklenti, düzenli ifadeler kullanarak metin bulup değiştirmenizi sağlar. Excel'e entegre olur ve yerleşik seçeneğe göre daha gelişmiş bir bul/değiştir işlevselliği sunar.
- PowerGREP: Doğrudan bir Excel eklentisi olmasa da PowerGREP, Excel dosyalarıyla çalışabilir. Metin ve ikili dosyalar üzerinde karmaşık regex işlemlerine izin veren güçlü bir Windows grep aracıdır. Daha çok bağımsız bir uygulamadır ancak Excel ile birlikte gelişmiş regex işlemleri için kullanılabilir. Ancak ucuz değildir. Tek kullanıcı lisansı 159 $ ve 100 kullanıcı lisansı için fiyat 5.300 $'a kadar çıkar.
Bazı eklentiler doğrudan Excel içinde Ekle sekmesi > Eklentiler Al üzerinden bulunabilir.
Diğerleri harici bir kaynaktan indirilip kendi kurulum talimatlarına göre yüklenmelidir.
Birkaç husus:
- Uyumluluk: Eklentinin Excel sürümünüz ve işletim sisteminizle uyumlu olduğundan emin olun.
- Güvenlik: Yalnızca güvenilir kaynaklardan eklenti indirip yükleyin.
- İşlevsellik İhtiyaçları: Gerçekleştirmeniz gereken özel regex görevlerini göz önünde bulundurun ve bu ihtiyaçlara en uygun eklentiyi seçin.
Sonuç
Çoğu durumda, FIND, SEARCH ve REPLACE gibi yerel işlevler, Excel'deki metin işleme ihtiyaçlarınızın %90'ını karşılar. Ancak, daha karmaşık dize kalıplarını içeren kalan %10 için regex son derece yardımcı olabilir. Yaygın programlama dilleriyle düzenli ifadeleri uygulamayı öğrenmek için Python'da Düzenli İfadeler ve R'de Orta Düzey Düzenli İfadeler kurslarımıza göz atın.
Excel ile ilgili her şeye hızla hâkim olmak için, aracı yetkin şekilde kullanmak için gereken temel becerileri öğreten Excel Fundamentals yetenek yolumuzu inceleyin.

Gündüzleri veri analisti, geceleri hikâye anlatıcısı. Bilgimi kullanarak veri okuryazarlığı açığını kapatmayı ve yeni başlayanların bu alana geçişine yardımcı olmayı seviyorum. Felsefem, günde yalnızca 5 dakika da olsa her gün bir şeyler öğrenmektir!
