Sitemap

REGEX (Regular Expression) in Python Programming Language

4 min readMar 8, 2026

--

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 library re.
  • 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. Formatnya span=(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: 8

Pola 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

--

--