Ana içeriğe atla

Regular Expressions


 Regular Expressions

Yazılım dünyasında bazı kavram ve yöntemler, o kadar geniş bir kullanım alanına sahiptirler ki, kullanılan dilden bağımsız olarak geliştirilmişlerdir. Her yazılım dili geliştiricisi bu yöntemi hazır olarak kullanır ve birçok kişi tarafından bilinirler. Regular Expressions bu kavramların belki de en çok bilinenlerindendir. Bu bilinirlik, kullanma noktasında aynı paralellikte değildir. IT profesyonelleri dahil kullananların birçoğu da gerçekte bilmeden kopyala-yapıştır ile hazır oluşturulmuş regExp örneklerini kullanırlar. 

Günümüzde dört ayrı kullanım alanından söz edebiliriz.
  1. İstemci tarafında belli alanlarda veri girişi sırasında verinin kalite kontrolünün yapılmasında,
  2. Metin içinde arama yapılmasında,
  3. Metin içinde değişiklik yapılmasında
  4. Veri kalitesi işlemlerinde.

Tabii metin çok genel anlamdadır, bir text dosya da olabilir, veri tabanındaki bir alan da. Gelelim somut örneklere. Öncelikle başta belirttiğim kopyala-yapıştır ile kullanmaya örnek verelim. eposta örüntüsü 

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b

Bunu alıp bir metin içindeki bütün eposta adreslerini alabilir, alt alanlarına erişebilir, veya doğrudan düzenlediğiniz bir web sayfasında eposta alanına eposta olamayacak bir string girilmesini en baştan önleyebilirsiniz.
Bu yazımızda bilmeyenler veya bilmeden kullananlar için RegEx dünyasını biraz olsun bilinir kılmak istiyoruz. Öncelikle tanım. Bir metin içinde örüntü (pattern) aramak için özel amaçla bir araya getirilmiş karakter dizileridir. Örneğin, A dan Z ye kadar bütün harfler ve 0 dan 9 a kadar bütün sayılar içeren karakter gruplarının örüntüsü
[A-Za-z0-9]

Uygulamak esastır

Tabii anlamak için uygulamak gerek ve bunun için normalde geliştiricilerin kullandıkları, bazı editörler ve IDE lerin sundukları imkanlardan faydalanabiliriz. Ama ben son zamanlarda online güzel bir arayüzü olan iki siteyi kullanıyorum, Verinizin web de görünür hale gelmesi sizin açınızdan problem teşkil etmiyorsa kullanabilirsiniz. Birisi; regexr diğeri regex101 siteleridir. Ben bu yazıda RegExr i kullanacağım.
Örneğin, verilen bir metinde yukarıdaki örüntüyü kullanalım. 
Hemen dikkatimizi çekiyor, türkçeye özgü harfler hariç harfler mavi ile boyandı. Bunun sebebi RegEx standartlarının ASCII karakter setine göre çalışmasıdır. Bu nedenle Türkçe için her bir harfi eklemek gerekiyor. 
[âşöığüçiŞÖÜÇİA-Za-z0-9]
Bu şekilde bütün metni seçmiş olduk. Ama daha anlamlı bir iş yapalım. başında "s" harfi olan ve sonu "lar" ile biten kelimeleri seçmek isteyelim.
 s[âşöığüçiŞÖÜÇİA-Za-z]+lar
Bunu yaptığımızda "s" ile başlayan belirttiğimiz karakterlerden bir veya daha fazlası ile oluşturulmuş sonu "lar" ile biten kelimeleri seçmemizi sağlar. "+" karakteri özel anlam olarak bir veya daha fazla anlamına geliyor. Alternatif bir özel karakter "*" ise sıfır veya daha fazla anlamında kullanılıyor.
Metin içindeki özel karakterleri bulmak istediğimizde karakterlerin başına "\" karakterini getirmemiz gerekebiliyor. Buna teknik olarak kaçış "escape" deniyor.Özel anlamından kaçıyorum sıradan bir anlamda kullanıyorum demektir. Ünlem işaretinin başında olmaması ise bunun özel anlamı olmadığı anlamındadır.
(!+|(\*)+|(\?)+|(\%)+|(\&)+|(\°)+|(\+)+|,+|\.(\.)+)
Tabii sadece bunlar olsa iş çok kolay olurdu. Şöyle bir arama yapmak istiyoruz. Her satırın ilk ve son kelimesi,

Burada "^" işareti satır başını, "$" işareti satır sonunu gösteriyor. En sondaki /g aramanın iteratif yani gidebildiği kadar yapılacağını, /m ise "^" ve "$" işaretçilerinin metnin her satırına uygulanacağını gösteriyor.
Burada amacımız yetenekleri göstermek olduğundan, ileri bir arama pattern inden bahsetmeden geçmeyelim. Lookahead ve lookbehind .
Pozitif ve negatif şeklinde iki ayrı kullanımı olan bu iki özel operatör bize çok kompleks örüntü arama imkanları kazandırmaktadır. Aradığımız örüntünün önünde veya sonrasında belli karakterlerin olması şeklinde koşul verme imkanı ve bu koşulların getirilen stringe dahil edilmemesi değişik aramalar yapabilmeyi sağlamaktadır. Örneğin, "lar" ile biten kelimeler.
 

Burada parantezlerin öneminden bahsedelim. her bir parantez 1 den başlayarak gruplama sağlıyor. Bu nedenle işaretlenen kelimeler grup2 ye giriyor. Yukarıda kelime başı ve sonu için verdiğimiz örnekte ise, satır başındaki kelime grup1 de satır sonundaki kelime grup2 dedir. Gruplara isim vermek mümkün olmakla birlikte geliştirme ortamına göre değişebilmektedir.
Bu konuda yazılım alanındaki her konuda olduğu gibi pratiğin önemli olduğu bir alan. Verdiğim sitelerden bu anlamda yararlanabilirsiniz.
Son olarak veri kalitesinde kullanımına bir örnek olarak, değişik formatta tarihlerin aynı formata getirilmesinde kullanılabildiğini söyleyelim.
[0-9]{4} ile dört dijitten oluşmuş her rakam, [-.] ile aralarda - veya . olabilir, [0-1][0-9] ile ilk basamağı 0 veya 1 diğeri 0 dan 9 a kadar herhangi bir sayı yani 00 dan 12 ye kadar aylar gibi. "|" işareti ise mantıktaki veya ile eş anlamlı, dolayısı ile iki ayrı regex veya ile birleştirilmiş.

Sonuç

Veri işleme ile az yada çok uğraşan her analistin, geliştiricinin alet çantasında olması gereken bir alet olan Regular Expressions, bilenler ile bilmeyenlerin bir olmadığı dünyanın vazgeçilmezlerindendir. Bu konudaki en iyi kaynak site regular-expressions.info sitesidir. Ben çokça faydalanıyorum, sizlere de tavsiye ederim.

Yorumlar

Bu blogdaki popüler yayınlar

SAS Nedir?

Anthony Barr, James Goodnight, John Sall ve Jane Helwig isimli dört kişi tarafından 1976 yılında Statistical Analysis System i smi ile kurulan fakat yazılım alanında ürettiği ürünlerle bu sınırları aşan SAS (SAS Institute) günümüzde borsaya açık olmayan dünyanın en büyük yazılım şirketlerinin başında geliyor. Hiç kuşkusuz bu dörtlüden en önemlisi, Harvard Business School tarafından* 20 inci yüzyılın en önemli iş liderleri listesinde gösterilen ve aynı zamanda şirketin CEO su olan James "Jim" Goodnight dır. İstatistik alanında doktorası olan Goodnight ayrı bir yazı konusu olmayı hakeden renkli bir kişilik. SAS denince ilk akla gelen öncelikle istatistik ve iş zekası alanlarında marketin önemli oyuncularının başında gelen ve "Bilmenin gücü (Power to know)" nü uzun yıllardır müşterilerinin hizmetine sunan Amerika Kuzey Karolayna merkezli dev bir yazılım şirketi olduğudur. Detaylarda ise genetik, tarım, finans, telekom, uzay, ilaç, kimya, bankacılık gibi birçok farkl

Veri kalitesi işlemlerinde bulanık mantığın (Fuzzy logic) kullanılması

Bulanık mantık (Fuzzy Logic) üzerine 1995 yılında bitirdiğim yüksek lisans tezinde, bulanık mantık ile çalışan bir uzman sistem yapmıştım. O zamanlar bulanık mantık, bilişim teknolojileri alanında yeni yeni emekleme dönemindeydi. Özellikle veritabanlarında bilgi keşfi çalışmaları için kullanılması yönünde oldukça çok akademik çalışma yapılmaktaydı. Günümüzde Bilgi Teknolojileri (BT) sektöründe bulanık mantık dahil diğer bilgi belirsizliği modellerini, BT profesyonelleri "kullanıyor" dememiz zor. Fakat en zor alanlardan biri olan ve gün geçtikçe önemi artan veri kalitesinin arttırılması konusunda yapılan çalışmalarda, bulanık mantık terimi oldukça sık ismi geçen bir terim haline geldi. Bu nedenle yazımızın konusu bu terimin genel anlamından çok veri kalitesinde kullanımı konusunda olacak. Veri kalitesi çalışmalarında fuzzy logic kelimelerini ilk duyduğumda kelimelerin bulanık küme teorisinde kullanılması geldi. Örneğin; çok gürültülü kelimesinin bulanık kümesinin kurulmas

Veriden Bilgiye Dönüşüm Sürecinin Temelleri

Merhaba, Ağırlıklı olarak Telekom sektöründe uzun yıllardır çalışmakta olan birisi olarak, büyük şirketlerdeki verinin ilk çıkış noktalarından, raporlarda yer alması ve karar destek sistemlerinde görünmesine kadar giden süreçler hakkında önemli bir bilgi birikimim oldu. Bu bilgi birikimi farklı noktalardan bakışı gerektirir ve az sayıda profesyonel, bu bakışa sahip olma ayrıcalığını taşır. Sürekli değişen Bilgi Teknolojileri (BT)  araçları ve yüksek rekabet ortamı içinde bu bilgi ve tecrübeyi sürekli güncel tutmakta ayrı bir gayret gerektirir. Tabii ki bu tecrübede kullanılan araçların yeri yadsınamaz. Atalarımız alet işler el övünür derken haklı bir noktaya temas etmişler. Fakat bu bizde, aletin işin en önemli parçası olduğu şeklinde bir yanılsama yaratmasın. Peki, işin en önemli kısmı nedir öyleyse? Bu soruya yanıt vermeden önce sürece biraz yakından bakmakta fayda var. Gerçekte birbirine benzeyen büyük şirket yada kurumlarda (yazının devamında ikisi içinde büyük org