Lesson regular expression dengan Python akan membahas dasar-dasar regular express seperti pattern, quantifiers dan operator. Untuk tutorial Python Regex yang lebih lengkap, silakan kunjungi https://skillplus.web.id/regular-expression-menggunakan-python/.
Regular Expressions atau sering disebut regex, cara untuk mencari string berdasarkan rule. Contoh, mencari semua alamat email dalam sebuah dokumen.
Untuk menggunakan regex, Python sudah menyediakan builtin library yaitu re. Untuk dokumentasi detail lihat disini.
Memahami regex, akan sangat membantu dalam memproses data input bagi model NLP.
Pattern
Pattern membuat pencarian lebih fleksible dan efektif. Contoh mencari seluruh alamat email pada sebuah dokumen. Saat mencari alamat email, alamat email tersebut tidak kita ketahui, tetapi kita tahu pattern atau pola dari alamat email.
Untuk mendefinisikan string pattern, gunakan huruf r didepan string pattern.
mypattern = r'patterngoeshere'
| Identifier | Deskripsi | Contoh Pattern | Contoh Match |
| \d | digit atau angka, [0-9] | image_\d\d | image_12 |
| \w | alphanumeric [a-zA-Z0-9_] | inv-\w\w\w-\d\d | inv-apr-01 |
| \s | whitespace [ \t\n\r\f\v] | x\sy\sz | x y z |
| \D | non digit atau bukan angka, [^0-9] | \D\D\D | XYZ |
| \W | non alphanumeric [^a-zA-Z0-9_] | \W\W | *= |
| \S | non whitespace [^ \t\n\r\f\v] | \S\S | bb |
teks = 'Nomer ponsel saya adalah 0821-1228-8888' ponsel_pattern = r'\d\d\d\d-\d\d\d\d-\d\d\d\d' #akan match 0821-1228-8888
Quantifier
Quantifier digunakan untuk membuat pattern lebih efisien dan mudah dibaca. Perhatikan pada contoh diatas, tentu penulisan yang berulang tidak efisien.
| Quantifier | Deskripsi | Contoh Pattern | Contoh Match |
| + | 1 atau lebih | ab+ | ab, abb, abbbb |
| {3} | tepat 3 kali | \D{3} | xyz |
| {2,4} | 2 sampai 4 kali | \d{2,4} | 123 |
| {3,} | 3 atau lebih | \w{3,} | halo |
| * | nol atau lebih | ab* | a, ab, abbb |
| ? | 1 kali atau tidak | ab? | a atau ab |
Berikut contoh code sederhana menggunakan regular expression. Pertama kita import dahulu librarynya. Lalu definisikan pattern dengan menggunakan perintah compile. Setelah itu gunakan pattern pada perintah search.
Pada contoh ini, selain mendapatkan nomer telpon secara utuh, bisa diambil per group. Jadi kita bisa mendapatkan kode operator dengan menggunakan perintah group(1)
import re
teks = 'Nomer ponsel saya adalah 0821-1228-8888'
phone_pattern = re.compile(r'(\d{3})-(\d{3})-(\d{4})')
results = re.search(phone_pattern,text)
results.group()
# 0821-1228-8888
results.group(1)
# 0821
results.group(2)
# 1228
results.group(3)
# 8888
Note: perintah search hanya akan mengambil match pertama saja. Jika ingin mendapatkan seluruh match, gunakan perintah finddall().
Syntax lainnya
Opeartor | (or), gunakan pipe operator untuk statement or.
re.search(r"wan|wati","Ibu saya adalah karyawati di perusahaan katering") #<re.Match object; span=(21, 25), match='wati'>
Wildcard . , akan match semua karakter dengan gunakan tanda . (titik), Contoh:
re.findall(r".at", "look, there is a cat with hat sat on bat") # ['cat', 'hat', 'sat', 'bat'] re.findall(r".tang","Kentang bintang batang tangguh") # ['ntang', 'ntang', 'atang', ' tang']
Perhatikan contoh kedua dari kode diatas. Tanda . akan mengambil 1 karakter apa saja didepan tang, termasuk space.
Exclusion ^, untuk negasi, digabungkan dengan operator [ ]. Semua didalam [ ] akan di exclude.
teks = 'tesing 1..2..3..' re.findall(r"[^\d]", teks) #['t', 'e', 's', 'i', 'n', 'g', ' ', '.', '.', '.', '.', '.', '.'] #akan sama dengan pattern berikut re.findall(r"[A-Za-z.]", teks) #['t', 'e', 's', 'i', 'n', 'g', ' ', '.', '.', '.', '.', '.', '.'] #menambahkan tanda + re.findall(r"[^\d]+", teks) ['tesing ', '..', '..', '..']
Contoh-contoh diatas adalah hal yang umum digunakan saat menggunakan regex. Silakan kunjungi detail dokumentasi regex disini.