Memahami perilaku karakter "$" dalam regular expression Python
- Saat menggunakan modul
re di Python, ^ dikenal berarti "awal string", dan $ dikenal berarti "akhir string".
- Namun,
$ tidak selalu hanya berarti "akhir string", dan perilakunya dapat berbeda tergantung platform.
- Di Python, ketika mode multiline dinonaktifkan, karakter
$ dapat cocok dengan akhir string atau sebelum karakter baris baru di akhir string.
Perbedaan antara akhir string dan kecocokan karakter baris baru
- Saat mode multiline dinonaktifkan, untuk mencocokkan akhir string di Python tanpa karakter baris baru, tidak cukup hanya menggunakan
$.
- Untuk mencocokkan akhir string,
\z dan \Z dapat digunakan.
- Di Python, jika menggunakan
re.MULTILINE, $ akan cocok dengan akhir string dan akhir setiap baris (tepat sebelum karakter baris baru).
Perbandingan perilaku regular expression di berbagai platform
- Melalui tabel yang membandingkan apakah pola cocok terhadap "cat\n" di berbagai platform, terlihat bahwa jika pencocokan yang mencakup karakter baris baru diperbolehkan, maka penggunaan
$ dalam mode multiline bekerja secara konsisten.
- Jika ingin mencocokkan tanpa menyertakan karakter baris baru, maka di semua platform selain Python dan ECMAScript gunakan
\z, sedangkan di Python dan ECMAScript masing-masing gunakan \Z atau $ tanpa mode multiline.
Pendapat GN⁺
- Artikel ini dapat menjadi pengingat bagi para pengembang yang menggunakan regular expression tentang perilaku tak terduga karakter
$ di Python.
- Regular expression sangat kuat untuk pemrosesan string, tetapi perlu kehati-hatian karena perilakunya dapat berbeda antarplatform.
- Pengembang perlu memahami perbedaan ini dan melakukan pengujian tambahan saat mengembangkan aplikasi lintas platform agar terhindar dari masalah kompatibilitas.
- Pustaka regular expression lain yang menyediakan fungsi serupa antara lain
java.util.regex di Java dan System.Text.RegularExpressions di .NET; keduanya juga perlu dipahami perbedaan perilakunya sesuai platform masing-masing.
- Saat memperkenalkan sintaks atau perilaku regular expression yang baru, perlu mempertimbangkan kompatibilitas dengan kode yang sudah ada, dampak performa, serta kurva pembelajaran di dalam tim, lalu mengevaluasi dengan baik manfaat dan biayanya.
1 komentar
Komentar Hacker News
grep,sed,awk, Python, dll.) secara default memperlakukannya sebagai akhir baris.