İçindekiler
Excel formüllerinde düzenli ifadelerin neden desteklenmediğini hiç anlayamıyor musunuz? Artık destekleniyor :) Özel işlevlerimizle, belirli bir desenle eşleşen dizeleri kolayca bulabilir, değiştirebilir, çıkarabilir ve kaldırabilirsiniz.
İlk bakışta, Excel metin dizesi manipülasyonları için ihtiyaç duyabileceğiniz her şeye sahiptir. Hmm... peki ya düzenli ifadeler? Oops, Excel'de yerleşik Regex işlevleri yok. Ama kimse kendi işlevlerimizi oluşturamayacağımızı söylemiyor :)
Düzenli ifade nedir?
Bir düzenli ifade (diğer adıyla regex veya regexp ) bir arama kalıbı tanımlayan özel olarak kodlanmış bir karakter dizisidir. Bu kalıbı kullanarak, bir dizede eşleşen bir karakter kombinasyonu bulabilir veya veri girişini doğrulayabilirsiniz. Joker karakter gösterimine aşinaysanız, regex'leri joker karakterlerin gelişmiş bir sürümü olarak düşünebilirsiniz.
Düzenli ifadelerin özel karakterler, işleçler ve yapılardan oluşan kendi sözdizimleri vardır. Örneğin, [0-5], 0 ile 5 arasındaki herhangi bir tek rakamla eşleşir.
Düzenli ifadeler JavaScript ve VBA dahil olmak üzere birçok programlama dilinde kullanılır. VBA'da özel fonksiyonlarımızı oluşturmak için kullanacağımız özel bir RegExp nesnesi vardır.
Excel regex'i destekliyor mu?
Ne yazık ki, Excel'de dahili Regex işlevleri yoktur. Formüllerinizde düzenli ifadeleri kullanabilmek için kendi kullanıcı tanımlı işlevinizi (VBA veya .NET tabanlı) oluşturmanız veya regex'leri destekleyen üçüncü taraf araçları yüklemeniz gerekir.
Excel Regex hile sayfası
Bir regex kalıbı ister çok basit ister son derece karmaşık olsun, ortak sözdizimi kullanılarak oluşturulur. Bu eğitimin amacı size düzenli ifadeleri öğretmek değildir. Bunun için internette yeni başlayanlar için ücretsiz eğitimlerden ileri düzey kullanıcılar için premium kurslara kadar pek çok kaynak bulunmaktadır.
Aşağıda, temelleri kavramanıza yardımcı olacak ana RegEx kalıplarına hızlı bir referans sunuyoruz. Ayrıca, daha fazla örnek çalışırken kopya kağıdınız olarak da işe yarayabilir.
Düzenli ifadeler konusunda rahatsanız, doğrudan RegExp işlevlerine geçebilirsiniz.
Karakterler
Bunlar, belirli karakterleri eşleştirmek için en sık kullanılan kalıplardır.
Desen | Açıklama | Örnek | Eşleşmeler |
. | Joker karakter: satır sonu hariç herhangi bir tek karakterle eşleşir | .ot | nokta , Sıcak , pot , @ot |
\d | Rakam karakteri: 0'dan 9'a kadar herhangi bir tek rakam | \d | İçinde a1b , kibritler 1 |
\D | Rakam OLMAYAN herhangi bir karakter | \D | İçinde a1b , kibritler a ve b |
\s | Boşluk karakteri: boşluk, sekme, yeni satır ve satır başı | .\s. | İçinde 3 sent , kibritler 3 c |
\S | Beyaz boşluk olmayan herhangi bir karakter | \S+ | İçinde 30 sent , kibritler 30 ve sentler |
\w | Kelime karakteri: herhangi bir ASCII harfi, rakam veya alt çizgi | \w+ | İçinde 5_cats*** , kibritler 5_cats |
\W | Alfanümerik karakter veya alt çizgi OLMAYAN herhangi bir karakter | \W+ | İçinde 5_cats*** , kibritler *** |
\t | Tab | ||
\n | Yeni hat | \n\d+ | Aşağıdaki iki satırlık dizede, 10 ile eşleşir 5 kedi 10 köpek |
\ | Bir karakterin özel anlamından kaçar, böylece onu arayabilirsiniz | \. \w+\. | Bir dize içindeki gerçek "." karakterini bulabilmeniz için noktadan kaçar Bayım. , Bayan. , Prof. |
Karakter sınıfları
Bu kalıpları kullanarak farklı karakter kümelerinin öğelerini eşleştirebilirsiniz.
Desen | Açıklama | Örnek | Eşleşmeler |
[karakterler] | Parantez içindeki herhangi bir tek karakterle eşleşir | d[oi]g | köpek ve kazmak |
[^karakterler] | Parantez içinde OLMAYAN herhangi bir tek karakterle eşleşir | d[^oi]g | Eşleşmeler dag, dug , d1g Eşleşmiyor köpek ve kazmak |
[from-to] | Parantezler arasındaki aralıktaki herhangi bir karakterle eşleşir | [0-9] [a-z] [A-Z] | 0'dan 9'a kadar herhangi bir tek rakam Herhangi bir tek küçük harf Herhangi bir tek büyük harf |
Niceleyiciler
Niceleyiciler, eşleşecek karakter sayısını belirten özel ifadelerdir. Bir niceleyici her zaman kendisinden önceki karaktere uygulanır.
Desen | Açıklama | Örnek | Eşleşmeler |
* | Sıfır veya daha fazla olay | 1a* | 1, 1a , 1aa, 1aaa vb. |
+ | Bir veya daha fazla olay | po+ | İçinde pot , eşleşmeler po İçinde fakir , kibritler Kaka |
? | Sıfır veya bir olay | roa?d | yol, çubuk |
*? | Sıfır veya daha fazla olay, ancak mümkün olduğunca az | 1a*? | İçinde 1a , 1aa ve 1aaa , kibritler 1a |
+? | Bir veya daha fazla olay, ancak mümkün olduğunca az sayıda | po+? | İçinde pot ve fakir , eşleşmeler po |
?? | Sıfır veya bir olay, ancak mümkün olduğunca az sayıda | Roa?? | İçinde yol ve çubuk , eşleşmeler ro |
{n} | Önceki deseni n kez eşleştirir | \d{3} | Tam olarak 3 basamaklı |
{n,} | Önceki desenle n veya daha fazla kez eşleşir | \d{3,} | 3 veya daha fazla basamak |
{n,m} | Önceki kalıbı n ile m kez arasında eşleştirir | \d{3,5} | 3 ila 5 basamaklı |
Gruplama
Gruplama yapıları, kaynak dizeden bir alt dizeyi yakalamak için kullanılır, böylece onunla bazı işlemler gerçekleştirebilirsiniz.
Sözdizimi | Açıklama | Örnek | Eşleşmeler |
(desen) | Grup yakalama: eşleşen bir alt dizeyi yakalar ve ona bir sıra numarası atar | (\d+) | İçinde 5 kedi ve 10 köpek , yakalar 5 (grup 1) ve 10 (grup 2) |
(?:desen) | Yakalamayan grup: bir grupla eşleşir ancak onu yakalamaz | (\d+)(?: köpekler) | İçinde 5 kedi ve 10 köpek , yakalar 10 |
\1 | Grup 1'in içeriği | (\d+)\+(\d+)=\2\+\1 | Eşleşmeler 5+10=10+5 ve yakalar 5 ve 10 yakalama gruplarında olan |
\2 | Grup 2'nin içeriği |
Çapalar
Çapalar, giriş dizesinde bir eşleşmenin aranacağı konumu belirtir.
Çapa | Açıklama | Örnek | Eşleşmeler |
^ | Dize başlangıcı Not: [^parantez içi] "değil" anlamına gelir | ^\d+ | Dizenin başlangıcında herhangi bir sayıda rakam. İçinde 5 kedi ve 10 köpek , kibritler 5 |
$ | Dizenin sonu | \d+$ | Dizenin sonunda herhangi bir sayıda basamak. İçinde 10 artı 5, 15 eder , kibrit 15 |
\b | Kelime sınırı | \bjoy\b | Eşleşmeler NEŞE ayrı bir kelime olarak, ancak Keyifli . |
\B | Kelime sınırı DEĞİL | \Bjoy\B | Eşleşmeler NEŞE içinde Keyifli ama ayrı bir kelime olarak değil. |
Alternasyon (OR) yapısı
Alternasyon operandı VEYA mantığını etkinleştirir, böylece hem bu hem de bu öğeyi eşleştirebilirsiniz.
İnşaat | Açıklama | Örnek | Eşleşmeler |
Dikey çubukla ayrılmış herhangi bir tek öğeyle eşleşir | (s | İçinde deniz kabukları satıyor, eşleşmeler satıyor ve kabukları |
Etrafına bakın
Lookaround yapıları, başka bir şey tarafından takip edilen veya edilmeyen bir şeyi eşleştirmek istediğinizde yardımcı olur. Bu ifadeler bazen "sıfır genişlikli iddialar" veya "sıfır genişlikli eşleşme" olarak adlandırılır çünkü gerçek karakterler yerine bir konumu eşleştirirler.
Not: VBA RegEx uygulamasında, lookbehind'ler desteklenmez.
Desen | Açıklama | Örnek | Eşleşmeler |
(?=) | Olumlu bakış | X(?=Y) | X ifadesinin ardından Y geldiğinde (yani X'in önünde Y varsa) bu ifadeyle eşleşir |
(?!) | Negatif öngörü | X(?!Y) | X ifadesinin ardından Y gelmiyorsa bu ifadeyle eşleşir |
(?<=) | Pozitif bakış | (?<=Y)X | X ifadesinden önce Y geldiğinde (yani X'in arkasında Y varsa) X ifadesiyle eşleşir |
(? )</td | Negatif bakış | (? Y)X</td | X ifadesinden önce Y gelmediğinde bu ifadeyle eşleşir |
Artık temel bilgileri bildiğinize göre, en ilginç kısma geçelim - dizeleri ayrıştırmak ve gerekli bilgileri bulmak için gerçek veriler üzerinde regex'leri kullanmak. Sözdizimi hakkında daha fazla ayrıntıya ihtiyacınız varsa, Düzenli İfade Dili hakkındaki Microsoft kılavuzu yardımcı olabilir.
Excel için özel RegEx işlevleri
Daha önce de belirtildiği gibi, Microsoft Excel'in yerleşik RegEx işlevleri yoktur. Düzenli ifadeleri etkinleştirmek için üç özel VBA işlevi (diğer adıyla kullanıcı tanımlı işlevler) oluşturduk. Kodları aşağıdaki bağlantılı sayfalardan veya örnek çalışma kitabımızdan kopyalayabilir ve ardından kendi Excel dosyalarınıza yapıştırabilirsiniz.
VBA RegExp fonksiyonları nasıl çalışır?
Bu bölüm iç mekaniği açıklar ve arka uçta tam olarak ne olduğunu bilmek isteyenler için ilginç olabilir.
VBA'da düzenli ifadeleri kullanmaya başlamak için ya RegEx nesne referans kütüphanesini etkinleştirmeniz ya da CreateObject fonksiyonunu kullanmanız gerekir. Sizi VBA editöründe referansı ayarlama zahmetinden kurtarmak için ikinci yaklaşımı seçtik.
RegExp nesnesinin 4 özelliği vardır:
- Desen - bu desen giriş dizesinde eşleştirmek için.
- Küresel - giriş dizesindeki tüm eşleşmelerin mi yoksa sadece ilkinin mi bulunacağını kontrol eder. Fonksiyonlarımızda, True olarak ayarlandığında tüm maçlar .
- MultiLine - çok satırlı dizelerde desenin satır sonlarında mı yoksa yalnızca ilk satırda mı eşleştirileceğini belirler. Kodlarımızda, arama yapmak için True olarak ayarlanmıştır her satırda .
- IgnoreCase - normal ifadenin büyük/küçük harfe duyarlı (varsayılan) veya büyük/küçük harfe duyarsız (True olarak ayarlanmış) olup olmadığını tanımlar. Bizim durumumuzda bu, isteğe bağlı match_case Varsayılan olarak, tüm fonksiyonlar büyük/küçük harfe duyarlı .
VBA RegExp sınırlamaları
Excel VBA temel regex kalıplarını uygular, ancak .NET, Perl, Java ve diğer regex motorlarında bulunan birçok gelişmiş özellikten yoksundur. Örneğin, VBA RegExp büyük/küçük harfe duyarlı olmayan eşleştirme için (?i) veya çok satırlı mod için (?m), lookbehinds, POSIX sınıfları gibi satır içi değiştiricileri desteklemez.
Excel Regex Eşleştirme işlevi
Bu RegExpMatch fonksiyonu bir girdi dizesinde düzenli bir ifadeyle eşleşen metin arar ve bir eşleşme bulunursa TRUE, aksi takdirde FALSE döndürür.
RegExpMatch(metin, desen, [match_case])Nerede?
- Metin (gerekli) - içinde arama yapılacak bir veya daha fazla dizge.
- Desen (gerekli) - eşleşecek düzenli ifade.
- Match_case (isteğe bağlı) - eşleşme türü. TRUE veya atlanmış - büyük/küçük harfe duyarlı; FALSE - büyük/küçük harfe duyarsız
Fonksiyonun kodu burada.
Örnek: dizeleri eşleştirmek için düzenli ifadeler nasıl kullanılır
Aşağıdaki veri kümesinde, SKU kodlarını içeren girişleri tanımlamak istediğinizi varsayalım.
Her SKU'nun 2 büyük harfle başladığı, ardından bir kısa çizgi geldiği ve ardından 4 rakam geldiği göz önüne alındığında, aşağıdaki ifadeyi kullanarak bunları eşleştirebilirsiniz.
Desen : \b[A-Z]{2}-\d{4}\b
Burada [A-Z]{2} A'dan Z'ye kadar herhangi 2 büyük harf ve \d{4} 0'dan 9'a kadar herhangi 4 rakam anlamına gelir. Bir kelime sınırı \b, bir SKU'nun ayrı bir kelime olduğunu ve daha büyük bir dizenin parçası olmadığını gösterir.
Kalıp oluşturulduktan sonra, normalde yaptığınız gibi bir formül yazmaya başlayın ve Excel'in Otomatik Tamamlama özelliği tarafından önerilen listede işlevin adı görünecektir:
Orijinal dizenin A5'te olduğunu varsayarsak, formül aşağıdaki gibi olur:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Kolaylık sağlamak için, düzenli ifadeyi ayrı bir hücreye girebilir ve mutlak bir başvuru ($A$2) kullanabilirsiniz. desen Bu, formülü başka hücrelere kopyaladığınızda hücre adresinin değişmeden kalmasını sağlar:
=RegExpMatch(A5, $A$2)
TRUE ve FALSE yerine kendi metin etiketlerinizi görüntülemek için, RegExpMatch'i IF işlevine yerleştirin ve istediğiniz metinleri value_if_true ve value_if_false Argümanlar:
=IF(RegExpMatch(A5, $A$2), "Evet", "Hayır")
Daha fazla formül örneği için lütfen bkz:
- Düzenli ifadeler kullanarak dizeler nasıl eşleştirilir
- Regex'lerle Excel Veri Doğrulama
Excel Regex Extract işlevi
Bu RegExpExtract işlevi, düzenli bir ifadeyle eşleşen alt dizeleri arar ve tüm eşleşmeleri veya belirli bir eşleşmeyi ayıklar.
RegExpExtract(text, pattern, [instance_num], [match_case])Nerede?
- Metin (gerekli) - içinde arama yapılacak metin dizesi.
- Desen (gerekli) - eşleşecek düzenli ifade.
- Instance_num (isteğe bağlı) - hangi örneğin çıkarılacağını gösteren bir seri numarası. Atlanırsa, bulunan tüm eşleşmeleri döndürür (varsayılan).
- Match_case (isteğe bağlı) - metin büyük/küçük harflerinin eşleştirilip eşleştirilmeyeceğini (TRUE veya atlanmış) veya yok sayılıp sayılmayacağını (FALSE) tanımlar.
Fonksiyonun kodunu buradan alabilirsiniz.
Örnek: düzenli ifadeler kullanılarak dizeler nasıl ayıklanır
Örneğimizi biraz daha ileri götürerek, fatura numaralarını ayıklayalım. Bunun için, herhangi bir 7 basamaklı sayıyla eşleşen çok basit bir regex kullanacağız:
Desen : \b\d{7}\b
Deseni A2'ye yerleştirin ve bu kompakt ve zarif formülle işinizi halledin:
=RegExpExtract(A5, $A$2)
Bir desen eşleştirilirse, formül bir fatura numarası çıkarır, eşleşme bulunamazsa hiçbir şey döndürülmez.
Daha fazla örnek için lütfen şu bölüme bakın: Excel'de regex kullanarak dizeleri ayıklama.
Excel Regex Değiştirme işlevi
Bu RegExpReplace işlevi, bir regex ile eşleşen değerleri belirttiğiniz metinle değiştirir.
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Nerede?
- Metin (gerekli) - içinde arama yapılacak metin dizesi.
- Desen (gerekli) - eşleşecek düzenli ifade.
- Değiştirme (gerekli) - eşleşen alt dizelerin değiştirileceği metin.
- Instance_num (isteğe bağlı) - değiştirilecek örnek. Varsayılan değer "tüm eşleşmeler" şeklindedir.
- Match_case (isteğe bağlı) - metin büyük/küçük harflerinin eşleşip eşleşmeyeceğini (TRUE veya atlanmış) veya yok sayılıp sayılmayacağını (FALSE) kontrol eder.
Fonksiyonun koduna buradan ulaşabilirsiniz.
Örnek: regex kullanarak dizeleri değiştirme veya kaldırma
Kayıtlarımızdan bazıları kredi kartı numaraları içermektedir. Bu bilgiler gizlidir ve bunları başka bir şeyle değiştirmek veya tamamen silmek isteyebilirsiniz. RegExpReplace İkinci bir senaryoda, boş bir dize ile değiştireceğiz.
Örnek tablomuzda, tüm kart numaraları boşluklarla ayrılmış 4 grup halinde yazılmış 16 haneye sahiptir. Bunları bulmak için, bu düzenli ifadeyi kullanarak deseni çoğaltırız:
Desen : \b\d{4} \d{4} \d{4} \d{4}\b
Değiştirme için aşağıdaki dize kullanılır:
Değiştirme : XXXX XXXX XXXX XXXX
Ve işte tam bir formül değiştirin kredi kartı numaraları ile hassas olmayan bilgiler:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX")
Ayrı hücrelerdeki (A2 ve B2) regex ve değiştirme metni ile formül eşit derecede iyi çalışır:
Excel'de "kaldırma", "değiştirme "nin özel bir durumudur. için Kaldır kredi kartı numaraları için boş bir dize ("") kullanmanız yeterlidir. değiştirme Tartışma:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")
İpucu: Sonuçlardaki boş satırlardan kurtulmak için şu örnekte gösterildiği gibi başka bir RegExpReplace işlevi kullanabilirsiniz: Regex kullanarak boş satırlar nasıl kaldırılır.
Daha fazla bilgi için lütfen bkz:
- Excel'de regex kullanarak dizeleri değiştirme
- Regex kullanarak dizeler nasıl kaldırılır
- Regex'leri kullanarak beyaz boşlukları kaldırma
Alt dizeleri eşleştirmek, ayıklamak, değiştirmek ve kaldırmak için Regex Araçları
Ultimate Suite'imizin kullanıcıları, çalışma kitaplarına tek bir satır kod eklemeden düzenli ifadelerin tüm gücüne sahip olabilirler. Gerekli tüm kodlar geliştiricilerimiz tarafından yazılır ve kurulum sırasında Excel'inize sorunsuz bir şekilde entegre edilir.
Yukarıda tartışılan VBA işlevlerinin aksine, Ultimate Suite'in işlevleri .NET tabanlıdır ve bu da iki ana avantaj sağlar:
- Normal .xlsx çalışma kitaplarında herhangi bir VBA kodu eklemeden ve bunları makro özellikli dosyalar olarak kaydetmek zorunda kalmadan düzenli ifadeleri kullanabilirsiniz.
- NET Regex motoru, daha karmaşık desenler oluşturmanıza olanak tanıyan tam özellikli klasik düzenli ifadeleri destekler.
Excel'de Regex nasıl kullanılır?
Ultimate Suite yüklendiğinde, Excel'de düzenli ifadeleri kullanmak bu iki adım kadar basittir:
- Üzerinde Ablebits Verileri sekmesinde Metin grubunu seçin, tıklayın Regex Araçları .
- Üzerinde Regex Araçları bölmesinde, aşağıdakileri yapın:
- Kaynak verileri seçin.
- Regex deseninizi girin.
- İstediğiniz seçeneği seçin: Maç , Özüt , Kaldırmak veya Değiştirin .
- Sonucu değer olarak değil formül olarak almak için Formül olarak ekle onay kutusu.
- Harekete geç düğmesine bas.
Örneğin, A2:A6 hücrelerinden kredi kartı numaralarını kaldırmak için bu ayarları yapılandırırız:
Bir AblebitsRegex işlevi, orijinal verilerinizin sağındaki yeni bir sütuna eklenecektir. Bizim durumumuzda formül şöyledir:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4}\b")
Formül orada olduğunda, herhangi bir yerel formül gibi düzenleyebilir, kopyalayabilir veya taşıyabilirsiniz.
Regex formülü doğrudan hücreye nasıl eklenir
AblebitsRegex işlevleri, eklentinin arayüzünü kullanmadan doğrudan bir hücreye de eklenebilir. İşte nasıl yapılacağı:
- Tıklayınız fx formül çubuğundaki düğmesine veya Fonksiyon Ekleme üzerinde Formüller sekmesi.
- İçinde Fonksiyon Ekleme iletişim kutusunda AblebitsUDF'ler kategorisine gidin, ilgilendiğiniz işlevi seçin ve Tamam'a tıklayın.
- Fonksiyonun argümanlarını normalde yaptığınız gibi tanımlayın ve Tamam'a tıklayın. Bitti!
Daha fazla bilgi için lütfen Excel için Regex Araçları bölümüne bakın.
Excel hücrelerindeki metinleri eşleştirmek, ayıklamak, değiştirmek ve kaldırmak için düzenli ifadeler bu şekilde kullanılır. Okuduğunuz için teşekkür ediyor ve gelecek hafta sizi blogumuzda görmeyi dört gözle bekliyorum!
Mevcut indirmeler
Excel Regex - formül örnekleri (.xlsm dosyası)
Ultimate Suite - deneme sürümü (.exe dosyası)