Regular Expression Dengan Python

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'
IdentifierDeskripsiContoh PatternContoh Match
\ddigit atau angka, [0-9]image_\d\dimage_12
\walphanumeric [a-zA-Z0-9_]inv-\w\w\w-\d\dinv-apr-01
\swhitespace [ \t\n\r\f\v]x\sy\szx y z
\Dnon digit atau bukan angka, [^0-9]\D\D\DXYZ
\Wnon alphanumeric [^a-zA-Z0-9_]\W\W*=
\Snon whitespace [^ \t\n\r\f\v]\S\Sbb
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.

QuantifierDeskripsiContoh PatternContoh Match
+1 atau lebihab+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 lebihab*a, ab, abbb
?1 kali atau tidakab?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.

Sharing is caring: