in Eski Blog Yazılarım

Regex.Replace’i Kuvvetlendirin.

Bazı durumlarda bir string değerinin içerisinden belirli bir desene uyan karakter kümelerini değiştirmek gerekebilir. Böyle durumlarda C#’ın System.Text.RegularExpressions sınıf kütüphanesi geliştiricinin imdadına yetişiyor. (.Net Framework’ün programcının hayatını daha güzelleştirme özelliği gerçekten var!)

Benim senaryomda bir alanadı listesinin sonlanma tarihlerinin formatları çok farklı bir şekilde geliyordu. Bu farklılıkları yine Regex kullanarak giderdim. Son olarak aşağıdaki gibi bir tarih formatına kavuştum.

Feb 7 2009, Mar 19 2009 gibi.

Fakat DateTime veritipinin ParseExact metodu "Feb 7 2009" stringini tarihe çeviremiyordu. Nedeni de 7’nin 07 olmayışıydı. Bunun üzerine biraz googling yaptıktan sonra aşağıdaki msdn sayfalarını buldum. iyi de oldu hani.

http://msdn.microsoft.com/en-us/library/cft8645c(VS.80).aspx
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx

Bu sayfalardan MatchEvaluator diye bir delegate’in varlığını öğrendikten sonra aşağıdaki gibi bir çözüm ürettim.

            GelenTarih = "Mar 7 2009";
GelenTarih = Regex.Replace(GelenTarih, @"d{1}s", delegate(Match ma)
{
string v = ma.ToString();
return "0" + v;
});

Çıktısı :
Mar 07 2009

Türkçeleştirmek gerekirse. GelenTarih değişkenin içinde ki tek haneli sayısal karakteri (d{1}s) yakalayıp en başına sıfır sayısını ekle diyoruz.

Bu kalıbı çok daha genişletebilriz tabiki. Özellikle html parserlarda veya kendi taglarımızı yazarken (Forumlardaki BBCode gibi) işimizi çok kolaylaştıracak bir metod.

Yorum Bırak

Comment