Python Regex: re Modülüyle Desen Eşleştirme

Python'da Normal İfadelerde (Regex) ustalaşın. Yerleşik yeniden kitaplığı kullanarak dize verilerini aramayı, eşleştirmeyi, bölmeyi ve değiştirmeyi öğrenin.

Editör'de deneyin

Genel Bakış

Normal İfadeler (genellikle regex olarak kısaltılır), gelişmiş metin arama, dize eşleştirme ve manipülasyon için kullanılan bir mini dildir. Regex, basit dize değerlerini kontrol etmek yerine, büyük metin gövdelerinde arama yapmak için karmaşık desenler tanımlamanıza olanak tanır. Örneğin, bir belgedeki tüm e-posta adreslerini, telefon numaralarını veya URL'leri bulmanın normal dize yöntemleriyle ifade edilmesi basit, ancak normal dize yöntemleri kullanılarak yazılması inanılmaz derecede karmaşıktır.

Python, 're' modülü aracılığıyla düzenli ifadeler için yerleşik destek sağlar. Modül, ilk eşleşmeyi bulmak için 're.search()', eşleşen tüm alt dizeleri liste olarak almak için 're.findall()' ve eşleşme nesneleri üzerinde yineleme yapmak için 're.finditer()' gibi kritik işlevler içerir. Her eşleşme nesnesi, eşleşen alt dizenin tam başlangıç ​​ve bitiş konumu dizini ve eşleşen metnin kendisi gibi meta veriler sağlar.

Normal ifade kalıpları özel meta karakterler kullanır: "\d" herhangi bir rakamla eşleşir, "\w" alfanümerik karakterlerle eşleşir, "+" bir veya daha fazla tekrarla eşleşir ve köşeli parantezler "[...]" karakter kümelerini tanımlar. Parantezlerle gruplamak `(...)` bir modelin belirli bölümlerini çıkarmanıza olanak tanır. Ek olarak, `re.sub()` bir kalıp aramanıza ve onu yeni bir dizeyle değiştirmenize olanak tanır. Regex'in zorlu bir öğrenme eğrisi olmasına rağmen, bunda uzmanlaşmak size metin işleme için inanılmaz derecede hızlı ve çok yönlü bir araç sağlar.

Kod ve Yürütme Çıkışı

Bir e-posta adresinin bileşenlerini doğrulamak ve çıkarmak için re modülünü kullanma.

regex_demo.py
Editör'de deneyin
import re

text = "Contact support at info@pyrun.xyz or developer@pyrun.xyz today."

# Pattern to match email addresses
email_pattern = r"([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"

# Find all matches
emails = re.findall(email_pattern, text)
print("Emails found:")
for user, domain in emails:
    print(f"User: {user} | Domain: {domain}")

# Redacting emails using re.sub
redacted_text = re.sub(email_pattern, "[REDACTED]", text)
print(f"\nRedacted Text:\n{redacted_text}")
Terminal Çıkışı
Emails found:
User: info | Domain: pyrun.xyz
User: developer | Domain: pyrun.xyz

Redacted Text:
Contact support at [REDACTED] or [REDACTED] today.

Adım Adım Uygulama

  • Biçim girişlerini doğrulama (e-postalar, telefonlar, şifreler)
  • Durum kodları için sunucu erişim günlükleri ayrıştırılıyor
  • Ham HTML ve işaretleme raporlarından bilgi alma

Sıkça Sorulan Sorular

Regex kalıplarında 'r' önekinin önemi nedir?

'Ham dize' anlamına gelir. Ham dizeler, ters eğik çizgileri (\) kaçış karakterleri yerine gerçek karakterler olarak ele alır ve normal ifade joker karakterleri ile sözdizimi çakışmalarını önler.

re.match ve re.search arasındaki fark nedir?

re.match yalnızca dizenin en başından başlayarak bir eşleşme olup olmadığını kontrol ederken, re.search bir eşleşme için dizenin tamamını tarar.

İlgili Konular

Önerilen Python Kaynakları

İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.