REGEX (Regular Expression) in Python Programming Language
Memagami Regex
Regex (Regular Expression) adalah pola (pattern) yang digunakan untuk mencari, mencocokkan, memvalidasi, atau memanipulasi teks dalam pemrograman python.
Contoh:
Regex= cat , text = 'my cat is cute' → hasil= cocok.
Regex= dog , text= 'my cat is cute’ → hasil= tidak cocok.
Library re
re adalah library Python yang digunakan untuk menjalankan regex. Secara umum bentuk fungsi regex adalah: re.method(pattern, string, flags)
pettern: Pola regex yang ingin dicari dalam teks.string: Teks yang ingin diperiksa atau dicari polanya.flags(opsional): Mengatur cara pencarian regex.
Method Search pada Library re
Method search() pada library re digunakan untuk mencari pola (pattern) pertama yang cocok di dalam sebuah string. Contoh:
import re
text = "The rain in Spain stays mainly in the plain."
hasil = re.search('plain', text)
print(hasil)<re.Match object; span=(38, 43), match='plain'><re.Match object>menunjukkan bahwa Python mengembalikan objek bertipe Match dari libraryre.span=(38, 43)menunjukkan posisi indeks dalam string tempat pola ditemukan. Dari output, kata plain ditemukan mulai dari index 38 dan berakhir sebelum index 43. Formatnyaspan=(start_index, end_index)match='plain'menunjukkan teks yang cocok dengan pola regex.
Pada re.search() mengembalikan Match Object. Object ini memiliki beberapa method seperti .group(), .span(), .start(), .end() yang dapat digunakan untuk mengambil informasi dari hasil pencarian regex.
import re
text = "?trio167setiawan16!"
hasil = re.search('\d+', text)
if hasil:
print(f"text contains a number: {hasil.group()}")
print(f"Number found at position: {hasil.span()}")
print(f"Number starts at index: {hasil.start()}")
print(f"Number ends at index: {hasil.end()}")
else:
print("No number found in the text.")text contains a number: 167
Number found at position: (5, 8)
Number starts at index: 5
Number ends at index: 8Pola Dasar Regex yang Paling Umum Digunakan
- Karakter Biasa (Literal Characters)
import re
text = "Saya belajar python"
hasil = re.search("python", text)
print(hasil)<re.Match object; span=(13, 19), match='python'>- Titik (
.) digunakan untuk mewakili satu karakter apa pun kecuali newline.
import re
text = "Saya belajar python"
hasil = re.search(".j", text)
print(hasil)<re.Match object; span=(8, 10), match='aj'>- (
^) untuk menunjukkan awal string.
import re
text = "Saya belajar python"
hasil = re.search("^Saya", text)
print(hasil)<re.Match object; span=(0, 4), match='Saya'>- (
$) untuk menunjukkan akhir string.
import re
text = "Saya belajar python"
hasil = re.search("python$", text)
print(hasil)<re.Match object; span=(13, 19), match='python'>- Character Class (
[ ]) untuk menentukan pilihan karakter.
import re
text = "Saya belajar python"
hasil = re.search("[abc]", text)
print(hasil)<re.Match object; span=(1, 2), match='a'>import re
text = "Saya belajar python"
hasil = re.search("[j-z]", text)
print(hasil)<re.Match object; span=(2, 3), match='y'>- Negasi Character (
^).
Jika menggunakan ^ di dalam [ ], maka artinya bukan karakter tersebut.
import re
text = "saya belajar python"
hasil = re.search("[^a-s]", text)
print(hasil)<re.Match object; span=(2, 3), match='y'>- Shortcut Character Classes
\d : digit (0–9)
\D : bukan digit
Get Trio Setiawan’s stories in your inbox
Join Medium for free to get updates from this writer.
\w : huruf, angka, underscore
\W : bukan huruf/angka
\s : spasi
\S : bukan spasi
+, tambahan+diakhir akan akan mengambil semua karakter berturut-turut yang memenuhi kondisi.
text = 'saya lahir pada tahun 1967'
hasil = re.search('\d', text)
hasil1 = re.search('\d+', text)
if hasil:
print("hasil tanpa (+):", hasil.group())
print("hasil dengan (+):", hasil1.group())
else:
print("No match found.")hasil tanpa (+): 1
hasil dengan (+): 1967- Quantifier (Pengulangan) digunakan untuk menentukan berapa kali karakter muncul.
* : 0 atau lebih
import re
text = "a ab abb abbb"
hasil = re.findall("ab*", text)
print(hasil)['a', 'ab', 'abb', 'abbb']Artinya, pola boleh muncul 0 atau lebih kali
+ : 1 atau lebih
import re
text = "a ab abbsab abbb"
hasil = re.findall("ab+", text)
print(hasil)['ab', 'abb', 'ab', 'abbb']Artinya, mengambil sebanyak mungkin karakter yang cocok.
? : 0 atau 1 kemunculan
import re
text = "color colour"
hasil = re.findall("colou?r", text)
print(hasil)['color', 'colour']Artinya pola u boleh ada atau tidak ada (opsional).
{n} : tepat n kali
text = 'saya lahir pada tahun 1967'
hasil = re.search('\d', text)
hasil1 = re.search('\d{3}', text)
if hasil:
print("hasil tanpa ({3}):", hasil.group())
print("hasil dengan ({3}):", hasil1.group())
else:
print("No match found.")hasil tanpa ({3}): 1
hasil dengan ({3}): 196{n,m} : antara n sampai m
import re
text = "a aa aaa aaaa aaaaa"
hasil = re.findall("a{2,4}", text)
print(hasil)['aa', 'aaa', 'aaaa', 'aaaa']- Grouping (
( )) untuk mengelompokkan pola regex.
import re
text = "a ab ababba abbb"
hasil = re.findall("(ab)+", text)
print(hasil)['ab', 'ab', 'ab']Alternatif ( | ) berarti atau (OR)
import re
text = "saya suka kucing dan anjing"
hasil = re.search("kucing|anjing", text)
print(hasil)<re.Match object; span=(10, 16), match='kucing'>- Escape Character (
\) untuk menghilangkan arti khusus karakter regex.
import re
text = "Apakah kamu baik?"
hasil = re.search(r"\?", text)
print(hasil)<re.Match object; span=(16, 17), match='?'>Case Sensitve to Case Insensitive
Secara default, regex bersifat case sensitive (huruf besar dan huruf kecil dianggap berbeda)
pettern = "^ap"
names = ["april", "apple", "grape", "pineapple", "application", "cap", "APPLE"]
for text in names:
match = re.search(pettern, text)
if match:
print(f"{text} start with an 'ap' (Case Sensitive)")
else:
print("-")april start with an 'ap' (Case Sensitive)
apple start with an 'ap' (Case Sensitive)
-
-
application start with an 'ap' (Case Sensitive)
-
-Jika ingin mengabaikan perbedaan huruf besar dan kecil, maka digunakan flags=re.IGNORECASE .
pettern = "^ap"
names = ["april", "apple", "grape", "pineapple", "application", "cap", "APPLE"]
for text in names:
match = re.search(pettern, text, flags=re.IGNORECASE)
if match:
print(f"{text} start with an 'ap' (Case Insensitive)")
else:
print("-")april start with an 'ap' (Case Insensitive)
apple start with an 'ap' (Case Insensitive)
-
-
application start with an 'ap' (Case Insensitive)
-
APPLE start with an 'ap' (Case Insensitive)Penggunaan Pengkondisian pada Fungsi Regex
Dalam Python, hasil dari fungsi regex seperti re.search() tidak selalu menemukan pola. Jika pola tidak ditemukan, fungsi tersebut akan mengembalikan None.
Karena itu, sering dianjurkan menggunakan if else untuk mengecek apakah hasilnya ada atau tidak sebelum digunakan.
import re
text = "Saya belajar python"
hasil = re.search("java", text)
if hasil:
print(hasil.group())
else:
print("Tidak ditemukan")Tidak ditemukan




