Python'da Düzenli İfade Dizeleri için Bayraklar
Düzenli ifadelerle çalışan yöntemler için isteğe bağlı parametrelerden biri olarak bayrakları ayarlamak için aşağıdaki sözdizimi kullanılır:
flags=re.bayrak_adı
Düzenli ifadelerle çalışmak için temel bayraklar
| Bayrak | Amaç |
|---|---|
re.IGNORECASE |
Karakterlerin yazım durumunun (büyük/küçük harf) göz ardı edilmesi. |
re.DOTALL |
Nokta, satır sonu dahil herhangi bir karakteri temsil eder. |
re.I |
Aramayı büyük/küçük harfe duyarsız yapar. |
re.L |
Kelimeleri mevcut dile göre arar.
Bu yorum, alfabetik grubu (\w ve \W) ve kelime sınırı davranışını (\b ve
\B) etkiler.
|
re.M |
$ karakteri metnin herhangi bir satırının sonunda (sadece metnin sonunda değil) arama yapar ve ^ karakteri metnin herhangi bir satırının başında (sadece metnin başında değil) arama yapar.
|
re.S |
Nokta (.) değerini, yeni satır dahil herhangi bir karakterle eşleşecek şekilde değiştirir.
|
re.U |
Harfleri Unicode karakter setine göre yorumlar. Bu bayrak \w, \W, \b,
\B davranışını etkiler. Python 3+ 'da bu bayrak varsayılan olarak ayarlanmıştır.
|
re.X |
Çok satırlı düzenli ifade sözdizimine izin verir. Desen içindeki boşlukları görmezden gelir ([] kümesi içindeki boşluklar veya ters eğik çizgi ile kaçanlar hariç) ve kaçılmayan '#' karakterini yorum olarak işler.
|
Örnek
re.IGNORECASE bayrağı kullanılarak karakterlerin büyük/küçük harf durumu göz ardı edilebilir. Bunun nasıl yapıldığına bir göz atalım. Bu örnekte düzenli ifade sadece küçük harfleri bulacaktır:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Kodun çalıştırılmasının sonucu:
'! ! CCC DDD'
Örnek
Şimdi yöntemin dördüncü parametresine re.IGNORECASE bayrağını ekleyelim, böylece düzenli ifade tüm büyük/küçük harflerdeki karakterleri arayacaktır:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Kodun çalıştırılmasının sonucu:
'! ! ! !'
Örnek
Düzenli ifade ile tüm satır sonlarını bulalım:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Çalıştırılan kodun sonucu:
'aaa!bbb'
Örnek
Ancak, eğer tüm karakterleri değiştirmek gerekiyorsa, düzenli ifadede nokta kullanıldığında satır sonları yakalanmaz:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Çalıştırılan kodun sonucu:
'!!!
!!!'
Örnek
Bu hatayı düzeltmek için re.DOTALL bayrağı kullanılmalıdır:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Çalıştırılan kodun sonucu:
'!!!!!!!'
Örnek
Parametreye, aralarına + operatörü koyarak birden fazla bayrak da iletebilirsiniz. Önce satır sonundaki 'a' harfini değiştirelim:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Çalıştırılan kodun sonucu:
'''
aaa
AAA
!
'''
Örnek
Şimdi re.M bayrağını koyalım:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Çalıştırılan kodun sonucu:
'''
!
AAA
!
'''
Örnek
Şimdi bir de büyük/küçük harf duyarsızlığı için bayrak uygulayalım:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Çalıştırılan kodun sonucu:
'''
!
!
!
'''