Python Düzenli İfadelerde Setler İçinde Tire
Tire, [ ] içinde özel bir karakterdir
(dışında ise değildir). Tireyi bir karakter
olarak kullanmak istiyorsanız, onu bir grup
ayırıcısı olarak algılanmayacağı yere
koyun.
Bunun önemi: Farkında olmadan bir karakter
grubu oluşturabilirsiniz. Örneğin, '[:-@]'
- siz iki nokta üst üste, tire ve et işaretini
seçtiğinizi düşünürsünüz, ancak aslında
: ve @ arasındaki karakter
grubu oluşur. Bu gruba şu karakterler
girer: ? < = > :
Bunlar nereden geliyor? ASCII tablosundan - iki nokta üst üstenin numarası, et işaretininkinden küçüktür - ve bir grup oluşur. Yani tüm gruplar ASCII tablosuna göre oluşur (isterseniz bundan faydalanabilirsiniz).
Bununla nasıl başa çıkılır: Tire karakterini,
kesinlikle bir grup karakteri olarak
algılanmayacağı yere koyun, örneğin başta
veya sonda (yani ['den sonra veya
]'den önce).
Tireyi kaçırarak da (escape) kullanabilirsiniz -
bu durumda konumu ne olursa olsun kendisini
temsil eder. Örneğin, [:-@] yerine
[:\-@] yazın - ve artık bir grup
olmayacak, üç karakter olacak: iki nokta
üst üste, tire ve et işareti @.
Örnek
Aşağıdaki örnekte arama kalıbı şudur:
1 rakamı, sonra 'a' ile
'z' arasında bir harf, sonra
2 rakamı:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Kodun çalıştırılma sonucu:
'! 1-2 ! !'
Örnek
Şimdi tireyi kaçıralım. Sonuçta arama
kalıbı şudur: 1 rakamı, sonra
'a' harfi, veya tire, veya
'z' harfi, sonra 2 rakamı:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Kodun çalıştırılma sonucu:
'! ! 1c2 !'
Örnek
Tireyi kaçırmadan, sadece yerini değiştirebilirsiniz:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Kodun çalıştırılma sonucu:
'! ! 1c2 !'
Örnek
Aşağıdaki örnekte arama kalıbı şudur:
ilk karakter küçük harfler veya tire
'-', sonra iki tane 'x'
harfi:
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Kodun çalıştırılma sonucu:
'! Axx ! @xx'
Örnek
Aşağıdaki örnekte arama kalıbı şudur:
ilk karakter küçük harfler, büyük harfler
veya tire '-', sonra iki tane
'x' harfi:
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Kodun çalıştırılma sonucu:
'! ! ! @xx'
Örnek
Tireyi iki grubun arasına yerleştirebilirsiniz - orada kesinlikle başka bir grup oluşturmayacaktır:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Kodun çalıştırılma sonucu:
'! ! ! @xx'
Pratik Görevler
Bir string verildi:
txt = 'xaz xBz xcz x-z x@z'
Şu kalıba uyan tüm stringleri bulun:
'x' harfi, büyük veya küçük harf
veya tire, 'z' harfi.
Bir string verildi:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Şu kalıba uyan tüm stringleri bulun:
'x' harfi, sonra dolar işareti, veya
tire veya artı işareti, sonra 'z' harfi.