Python düzenli ifadelerinde "$" karakterinin davranışını anlamak
- Python'un
re modülü kullanıldığında, ^ işaretinin "dizenin başlangıcı", $ işaretinin ise "dizenin sonu" anlamına geldiği bilinir.
- Ancak
$ her zaman yalnızca "dizenin sonu" anlamına gelmez ve davranışı platforma göre değişebilir.
- Python'da çok satırlı mod devre dışıyken,
$ karakteri dizenin sonuna veya dizenin sonundaki satır sonu karakterinden hemen önce eşleşebilir.
Dize sonu ve satır sonu karakteri eşleşmesi arasındaki fark
- Çok satırlı mod devre dışıyken Python'da satır sonu karakteri olmadan dizenin sonuna eşleşmek için yalnızca
$ kullanmak yeterli değildir.
- Dizenin sonuna eşleşmek için
\z ve \Z kullanılabilir.
- Python'da
re.MULTILINE kullanıldığında $, dizenin sonuna ve her satırın sonuna (satır sonu karakterinden hemen önce) eşleşir.
Farklı platformlarda düzenli ifade davranışlarının karşılaştırılması
- Çeşitli platformlarda
cat\n için desen eşleşmesinin karşılaştırıldığı tablo, satır sonu karakterini içerecek şekilde eşleşmeye izin veriliyorsa çok satırlı modda $ kullanmanın tutarlı davrandığını gösteriyor.
- Satır sonu karakterini dahil etmeden eşleşmek için Python ve ECMAScript dışındaki tüm platformlarda
\z kullanılmalı; Python ve ECMAScript'te ise sırasıyla \Z veya çok satırlı mod olmadan $ kullanılmalıdır.
GN⁺ görüşü
- Bu yazı, düzenli ifade kullanan geliştiricileri Python'da
$ karakterinin beklenmedik davranışı konusunda uyarabilir.
- Düzenli ifadeler dize işleme için son derece güçlüdür; ancak platforma göre farklı davranabildikleri için dikkat gerektirir.
- Geliştiricilerin bu farkları bilmesi ve çapraz platform uygulamaları geliştirirken uyumluluk sorunlarından kaçınmak için ek testler yapması gerektiği vurgulanıyor.
- Benzer işlevler sunan diğer düzenli ifade kütüphaneleri arasında Java'nın
java.util.regex ve .NET'in System.Text.RegularExpressions kütüphaneleri yer alır; bunlarda da platforma özgü davranış farkları anlaşılmalı ve buna göre kullanılmalıdır.
- Yeni bir düzenli ifade sözdizimi veya davranışı benimsenirken mevcut kodla uyumluluk, performans etkisi ve ekip içindeki öğrenme eğrisi dikkate alınmalı; bu değişikliklerin getireceği fayda ve maliyet iyi değerlendirilmelidir.
1 yorum
Hacker News görüşleri
grep,sed,awk, Python vb.) varsayılan olarak bunu satır sonu olarak ele alır.\Ave\Zya da bunların karşılıkları kullanılır.