Excel’de REGEXREPLACE ile HTML Kodlarını Temizleme: <[^>]+> İfadesi Nasıl Çalışır?
Excel, özellikle veri temizleme ve dönüştürme işlemlerinde yalnızca klasik metin fonksiyonlarından ibaret değildir. Yeni nesil Excel sürümlerinde bulunan REGEXREPLACE fonksiyonu, düzenli ifadeleri (Regular Expressions / Regex) kullanarak karmaşık metin işlemlerini oldukça kolaylaştırır.
Özellikle web sitelerinden, XML dosyalarından, ürün veri kaynaklarından veya HTML içeren metinlerden Excel'e aktarılan verilerde karşımıza çıkan <p>, <strong>, <br>, <div> gibi HTML etiketlerini temizlemek için REGEXREPLACE oldukça kullanışlıdır.
Örneğin aşağıdaki formül:
=REGEXREPLACE(AH1,"<[^>]+>","**-")
ilk bakışta karmaşık görünebilir. Ancak formülü üç parçaya ayırdığımızda çalışma mantığını anlamak oldukça kolaydır.
REGEXREPLACE Nedir?
REGEXREPLACE, bir metin içerisinde belirli bir düzenli ifade (Regex) ile eşleşen bölümleri bulup başka bir metinle değiştirmeye yarayan Excel fonksiyonudur.
Temel kullanım şekli şöyledir:
=REGEXREPLACE(metin, regex, değiştirilecek_metin)
Burada:
- metin: İşlem yapılacak hücre veya metin
- regex: Bulunacak karakter veya desen
- değiştirilecek_metin: Bulunan desenin yerine yazılacak değer
Bizim formülümüz ise:
=REGEXREPLACE(AH1,"<[^>]+>","**-")
şeklindedir.
Dolayısıyla Excel'e kabaca şu talimatı vermiş oluyoruz:
AH1 hücresindeki belirli bir Regex desenine uyan bölümleri bul ve bunların tamamını
**-metniyle değiştir.
Formülü Parçalara Ayıralım
Formülü üç ana bölüme ayırabiliriz:
=REGEXREPLACE(
AH1,
"<[^>]+>",
"**-"
)
Şimdi her bölümü ayrı ayrı inceleyelim.
1. Bölüm: AH1
AH1
Buradaki AH1, üzerinde işlem yapılacak Excel hücresidir.
Örneğin AH1 hücresinde şöyle bir veri olduğunu düşünelim:
<p>Bu bir ürün açıklamasıdır.</p>
REGEXREPLACE bu hücrenin içerisindeki metni inceleyecektir.
2. Bölüm: <[^>]+>
Formülün en önemli ve en teknik bölümü burasıdır:
<[^>]+>
Bu ifade bir regular expression, yani düzenli ifadedir.
Amacı genel olarak:
<karakteriyle başlayan ve>karakteriyle biten HTML benzri etiketleri yakalamaktır.
Örneğin şu ifadeleri yakalayabilir:
<p>
</p>
<strong>
</strong>
<br>
<div>
</div>
<h1>
</h1>
< Karakteri Ne Anlama Geliyor?
Regex'in başlangıcında:
<
bulunuyor.
Bu, eşleşmenin < karakteriyle başlamasını istediğimiz anlamına gelir.
HTML etiketlerinin büyük bölümünün başlangıcında bu karakter bulunur.
Örneğin:
<p>
<strong>
<div>
<span>
hepsi < ile başlar.
[^>] Bölümü Ne Anlama Geliyor?
Formülün biraz daha ilginç kısmı:
[^>]
ifadesidir.
Buradaki [...] karakter sınıfını belirtir.
Normalde:
[abc]
ifadesi a, b veya c karakterlerinden birini ifade eder.
Ancak köşeli parantezin hemen ardından ^ kullanıldığında anlam tersine döner.
Örneğin:
[^>]
şu anlama gelir:
>olmayan herhangi bir karakter.
Yani Regex motoruna:
"Burada
>karakteri dışındaki karakterleri kabul et."
demiş oluyoruz.
+ İşareti Ne Yapıyor?
Şimdi elimizde:
[^>]
var.
Bunun arkasına:
+
ekleniyor.
Sonuç:
[^>]+
+ karakteri, kendisinden önce gelen ifadenin bir veya daha fazla kez tekrarlanabileceğini belirtir.
Dolayısıyla:
[^>]+
şu anlama gelir:
>karakteri gelene kadar,>olmayan bir veya daha fazla karakteri ykala.
Örneğin:
<strong>
ifadesinde:
<strong
bölümü bu desene uyar.
Son > Karakteri
Regex'in sonunda:
>
bulunuyor.
Dolayısıyla bütün ifade:
<[^>]+>
haline geliyor.
Bu da şu mantığı oluşturuyor:
<→<karakteriyle başla[^>]+→>olmayan bir veya daha fazla karakter bul>→>karakteriyle bitir
Başka bir ifadeyle:
<ile başlayan, içerisinde>bulunmayan karakterlerden oluşan ve>ile sonlanan bölümü bul.
Bu yapı HTML etiketlerini yakalamak için oldukça pratik bir Regex desenidir.
3. Bölüm: "**-"
Formülün son kısmı:
"**-"
bulunan HTML etiketlerinin yerine yazılacak metindir.
Örneğin AH1 hücresinde:
<p>Ürün açıklaması</p>
olduğunu varsayalım.
Regex:
<[^>]+>
şu iki bölümü yakalar:
<p>
</p>
Bunların her biri:
**-
ile değiştirilir.
Sonuç yaklaşık olarak:
**-Ürün açıklaması**-
olur.
Burada önemli bir ayrıntı var:
**- metniyle değiştirir.
Eğer amacımız etiketleri tamamen kaldırmak olsaydı, son parametreyi boş bırakabilrdik:
=REGEXREPLACE(AH1,"<[^>]+>","")
Bu durumda:
<p>Ürün açıklaması</p>
şuna dönüşür:
Ürün açıklaması
Formül Gerçekte Nasıl Çalışıyor?
Örnek bir ürün açıklamamız olduğunu düşünelim:
<p>Samsung 55 inç televizyon</p>
<strong>4K UHD</strong>
<br>
<p>Akıllı TV özelliklerine sahiptir.</p>
Formül:
=REGEXREPLACE(AH1,"<[^>]+>","**-")
HTML etiketlerini tek tek arar.
Bulduğu etiketler:
<p>
</p>
<strong>
</strong>
<br>
<p>
</p>
Bunların tamamını:
**-
ile değiştirir.
Sonuç:
**-Samsung 55 inç televizyon**-
**-4K UHD**-
**-
**-Akıllı TV özelliklerine sahiptir.**-
şeklinde olabilir.
Peki Neden HTML Etiketlerini Değiştiriyoruz?
Bu yöntem özellikle e-ticaret verilerinde oldukça kullanışlıdır.
Bir ürünün açıklaması web sitesinden veya XML kaynağından Excel'e aktarıldığında veri genellikle düz metin olarak gelmez.
Örneğin:
<p>Ürün Özellikleri</p>
<ul>
<li>Bluetooth bağlantısı</li>
<li>4K çözünürlük</li>
<li>Smart TV</li>
</ul>
gibi bir içerikle karşılaşabiliriz.
Excel'de bunu doğrudan kullanmak istediğimizde HTML etiketleri görüntüyü kirletebilir.
REGEXREPLACE sayesinde bu etiketleri topluca yakalayabiliriz.
Sadece HTML Etiketlerini Silmek İstiyorsanız
Eğer hedefiniz HTML etiketlerini tamamen kaldırmaksa:
=REGEXREPLACE(AH1,"<[^>]+>","")
kullanabilirsiniz.
Örneğin:
<p>Harika bir ürün.</p>
şuna dönüşür:
Harika bir ürün.
Etiketlerin Yerine Boşluk Koymak
Bazı durumlarda etiketleri tamamen kaldırmak istenmeyebilir.
Örneğin:
<p>Birinci paragraf</p><p>İkinci paragraf</p>
etiketleri doğrudan silinirse:
Birinci paragrafİkinci paragraf
gibi istenmeyen bir sonuç oluşabilir.
Bunun yerine boşluk eklemek daha doğru olabilir:
=REGEXREPLACE(AH1,"<[^>]+>"," ")
Sonuç:
Birinci paragraf İkinci paragraf
olur.
Daha sonra gereksiz boşlukları temzlemek için Excel'in TRIM fonksiyonundan da yararlanılabilir.
**- Neden Kullanılmış Olabilir?
Formülde özellikle:
**-
kullanılması dikkat çekici.
Bu karakter dizisi standart bir HTML temizleme yöntemi değildir.
Muhtemelen belirli bir veri işleme sürecinde ayraç (delimiter) olarak kullanılmıştır.
Örneğin HTML etiketlerinin bulunduğu yerleri işaretlemek için:
**-
kullanılabilir.
Böylece veri daha sonra başka bir işlemden geçirilebilir.
Örneğin:
**-Ürün açıklaması**-**-Teknik özellikler**-
gibi bir çıktı elde edilip başka bir programda veya Excel formülünde bu karakter dizisi üzerinden işlem yapılabilir.
Bu nedenle formülün amacı yalnızca "HTML temizlemek" olmayabilir.
Asıl amaç:
HTML etiketlerinin bulunduğu noktaları özel bir işaretleyiciyle değiştirmek
de olabilir.
Regex'in Gücü Burada Ortaya Çıkıyor
Normal Excel fonksiyonlarıyla HTML etiketlerini temizlemek istediğimizde genellikle çok sayıda SUBSTITUTE kullanmamız gerekir.
Örneğin:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AH1,"<p>",""),"</p>",""),"<br>","")
Ancak HTML içerisinde yüzlerce farklı etiket bulunabilir:
<p>
<div>
<span>
<strong>
<b>
<i>
<ul>
<li>
<br>
<h1>
<h2>
Bunların tamamını tek tek SUBSTITUTE ile temizlemek oldukça zahmetlidir.
Regex yaklaşımında ise:
<[^>]+>
tek bir desenle genel bir çözüm sağlar.
Bu, Regex'in en önemli avantajlarından biridir.
Önemli Bir Nokta: Bu Regex Kusursuz Bir HTML Parser Değildir
Burada teknik açıdan önemli bir ayrım yapmak gerekiyor.
<[^>]+>
HTML etiketlerinin büyük bölümünü yakalamak için pratik bir çözümdür ancak tam teşekküllü bir HTML parser değildir.
Özellikle karmaşık HTML yapılarında:
>karakterinin attribute değerlerinde bulunması- Bozuk HTML
- Script içerikleri
- Style içerikleri
- HTML yorumları
- Özel karakter yapıları
gibi durumlarda beklenmeyen sonuçlar ortaya çıkabilir.
Örneğin:
<script>
if (a > b) ...
</script>
gibi bir içerikte Regex yaklaşımı her zaman HTML parser gibi davranmayacaktır.
Dolayısıyla bu yöntem:
- Basit HTML temizleme: Oldukça kullanışlı
- Karmaşık HTML ayrıştırma: HTML parser tercih edilmeli
şeklinde değerlendirilmelidir.
E-Ticaret Verilerinde Kullanım Senaryosu
E-ticaret sistemlerinde ürün açıklamaları çoğu zaman HTML formatında tutulur.
Örneğin bir XML veya veri aktarımından Excel'e şu içerik gelebilir:
<p><strong>Öne Çıkan Özellikler</strong></p>
<ul>
<li>Metal gövde</li>
<li>Bluetooth bağlantısı</li>
<li>USB Type-C</li>
</ul>
Bu veriyi raporlama amacıyla kullanmak istediğimizde HTML etiketlerini temizlemek gerekebilir.
İşte:
=REGEXREPLACE(AH1,"<[^>]+>","")
bu noktada oldukça pratik bir çözüm sunar.
Eğer HTML etiketlerinin bulunduğu noktaları ayrıca işaretlemek istiyorsak:
=REGEXREPLACE(AH1,"<[^>]+>","**-")
kullanılabilir.
Formülün Kısa Özeti
Formülümüz:
=REGEXREPLACE(AH1,"<[^>]+>","**-")
üç temel işlem gerçekleştiriyor:
| Bölüm | Görevi |
|---|---|
AH1 |
İşlem yapılacak hücre |
<[^>]+> |
HTML etiketi benzeri yapıları yakalar |
**- |
Yakalanan yapıların yerine yazılır |
Yani formülü Türkçe olarak şöyle okuyabiliriz:
AH1 hücresindeki
<ile başlayıp>ile biten etiket benzeri yapıları bul ve bunların her birini**-ile değiştir.
HTML Etiketlerini Temizlemek İçin Alternatifler
Etiketleri tamamen kaldırmak
=REGEXREPLACE(AH1,"<[^>]+>","")
Etiketlerin yerine boşluk koymak
=REGEXREPLACE(AH1,"<[^>]+>"," ")
Etiketlerin yerine özel ayraç koymak
=REGEXREPLACE(AH1,"<[^>]+>","**-")
Belirli bir HTML etiketini değiştirmek
Örneğin yalnızca <br> etiketlerini yakalamak için:
=REGEXREPLACE(AH1,"<br\s*/?>"," ")
Bu yöntem özellikle HTML'den Excel'e veri aktarırken daha kontrollü dönüşümler yapmak için kullanılabilir.
Sonuç
Excel'deki:
=REGEXREPLACE(AH1,"<[^>]+>","**-")
formülü, Regex'in Excel içerisindeki gücünü gösteren güzel bir örnektir.
Formüldeki:
<[^>]+>
deseni, < ile başlayıp > ile sonlanan HTML etiketlerini yakalamaya çalışırken, REGEXREPLACE bu eşleşmeleri belirlediğimiz:
**-
metniyle değiştirir.
En önemli nokta ise şudur: Bu formül HTML etiketlerini silmek yerine değiştirir. Eğer amaç HTML etiketlerinden tamamen kurtulmaksa, şu kullanım daha uygundur:
=REGEXREPLACE(AH1,"<[^>]+>","")
Özellikle XML/HTML kaynaklarından gelen ürün açıklamaları, teknik özellikler, kategori açıklamaları ve e-ticaret veri setlerinin Excel içerisinde temizlenmesi gibi işlemlerde REGEXREPLACE önemli ölçüde zaman kazandırabilir.
Regex mantığını öğrendikten sonra ise yalnızca HTML temizlemekle kalmaz; Excel içerisinde telefon numarası, e-posta, ürün kodu, SKU, seri numarası ve belirli metin kalıplarını bulma veya dönüştürme gibi çok daha gelişmiş işlemleri de gerçekleştirebilirsiniz.

Yorumlar
Yorum Gönder