Cara menggunakan REGEX pada Python

Cara menggunakan REGEX pada Python

  • Cari disini...
  • Browse

    • Katalog Kelas

      Ikuti materi yang kamu butuhkan

    • Roadmap

      Belajar online dengan terarah

    • Bootcamp

      Codepolitan x Catamyst

  • Explore

    • Tutorial & Artikel

      Temukan Artikel menarik

    • Podcast

      Podcast seputar pemrograman

    • Webinar

      Ikuti Berbagai Webinar

    • Event

      Temukan Event menarik

    • Beasiswa

      Program Beasiswa

    • Discord

      Komunitas Discord

    • Forum

      Diskusi antar Programmer

    • Leaderboard

      Ranking siswa Codepolitan

  • Partnership

    • For Company

      Solusi tepat untuk perusahaan

    • For School

      Kerjasama untuk sekolah

    • For Campus

      Kerjasama untuk kampus

    • For Mentor

      Peluang penghasilan untuk mentor

  • Career

LoginRegister

Saya memiliki kode berikut yang melihat melalui file dalam satu direktori dan menyalin file yang berisi string tertentu ke direktori lain, tetapi saya mencoba untuk menggunakan Ekspresi Reguler karena string dapat berupa huruf besar dan kecil atau campuran keduanya. 

Berikut adalah kode yang berfungsi, sebelum saya mencoba menggunakan RegEx

import os
import re
import shutil

def test():
    os.chdir("C:/Users/David/Desktop/Test/MyFiles")
    files = os.listdir(".")
    os.mkdir("C:/Users/David/Desktop/Test/MyFiles2")
    for x in (files):
        inputFile = open((x), "r")
        content = inputFile.read()
        inputFile.close()
        if ("Hello World" in content)
            shutil.copy(x, "C:/Users/David/Desktop/Test/MyFiles2")

Ini kode saya ketika saya mencoba menggunakan RegEx

import os
import re
import shutil

def test2():
    os.chdir("C:/Users/David/Desktop/Test/MyFiles")
    files = os.listdir(".")
    os.mkdir("C:/Users/David/Desktop/Test/MyFiles2")
    regex_txt = "facebook.com"
    for x in (files):
        inputFile = open((x), "r")
        content = inputFile.read()
        inputFile.close()
        regex = re.compile(regex_txt, re.IGNORECASE)

Saya rasa saya perlu satu baris kode seperti itu

if regex = re.compile(regex_txt, re.IGNORECASE) == True

Tapi sepertinya saya tidak bisa mendapatkan apa pun untuk bekerja, jika seseorang bisa mengarahkan saya ke arah yang benar, itu akan dihargai. 

Cara menggunakan REGEX pada Python

2,032 Views

Banyak aplikasi saat ini mengharuskan pattern matching Sebagai contoh, memeriksa validitas alamat e-mail, Semua hal tersebut dilakukan dengan bantuan Regular Expression.

Apa itu Regular Expression?

Contents

  • 1 Apa itu Regular Expression?
  • 2 Metakarakter
  • 3 Package Regular Expression
  • 4 Operasi Match
  • 5 Operasi Search
  • 6 Validasi Alamat Email menggunakan Regex
  • 7 Atribut metode pada perintah Search
  • 8 Modifikasi string pada regular expression Python

Regular Expression adalah suatu cara menggambarkan susunan pola dalam suatu kalimat. Regular Expression ini banyak digunakan dalam text processing. Kalian mungkin bertanya-tanya apa sih kegunaan Regular Expression yang sering disingkat regex ini?

Pembahasan regex disini ditujukan untuk pemula sehingga pembahasannya tidak akan terlalu mendalam. Sebagai ilustrasi dari pemakaian regex, kita akan mengambil contoh berikut. Misalnya kalian memiliki sebuah daftar nama dan nomor telepon, kemudian ingin mencari pemilik nomor yang digit ke-3 nya adalah 8 dan digit terakhirnya adalah 9. Ataupun hanya ingin mengekstrak semua alamat e-mail ataupun website dalam suatu dokumen. Tentu yang kalian butuhkan adalah teknik Regular Expression.

Metakarakter

Metakarakter mempunyai makna khusus dalam penggunaan regex. Beberapa metakarakter yang sering digunakan untuk membuat regex adalah sebagai berikut:

$ ^ [ ] . * + ? / | { } ( )

Penjelasannya sebagai berikut

  • Pertama adalah metakarakter  ^  untuk menandakan pencocokan dimulai dari awal baris
  • metakarakter  $  untuk menandakan pencocokan dimulai dari akhir baris.
    • Misalnya ekspresi reguler  ^cobaakan cocok dengan ‘coba’ yang didapat dari awal baris dan ekpresi coba$ akan cocok dengan ‘coba’ didapat dari akhir baris.
  • Selanjutnya kita membahas penggunaan  [dan  ]  Kedua tanda tersebut digunakan untuk menentukan kelas karakter yang ingin dicocokkan.
  • Kita bisa menulis karakter-karakter yang ingin dicocokkan ataupun range karakter yang ingin dicocokkan dengan menggunakan tanda  -.
    • Misalnya expresi [abc] akan cocok dengan karakter ‘a’,’b’, dan ‘c’.
    • Expresi reguler [abc] akan sama hasilnya dengan [a-c]. Bila kita ingin mencocokan semua karakter kapital, kalian cukup membuat expresi reguler [A-Z]. Perlu diingat metakarakter tidak aktif di dalam kelas.
    • Di dalam kelas, metakarakter kehilangan makna khususnya. Misalnya ekspresi reguler [abc$] akan cocok dengan ‘a’,’b’,’c’ dan ‘$’; di mana $ kehilangan makna khususnya. Kalian dapat mengkomplemenkan set karakter dalam kelas dengan menggunakan metakarakter  ^. Dengan demikian ekspresi [^a-c] akan cocok dengan karakter selain ‘a’,’b’,dan ‘c’.
  • Berikutnya adalah metakarakter  \yang digunakan untuk menghilangkan makna khusus dari suatu metakarakter. Misalnya apabila kalian ingin mencocokkan karakter ‘[‘ ataupun ‘$’ , kalian cukup memberikan tanda ‘\’ sebelum karakter tersebut untuk menghilangkan makna khususnya: \[ atau \$ . Dalam Python metakarakter ‘\’ biasa diikuti berbagai karakter untuk mewakili berbagai set khusus. 
    • \d ekivalen dengan kelas [0-9]
      \D ekivalen dengan kelas [^0-9]
      \s ekivalen dengan kelas [\t\n\f\v\r]
      \S ekivalen dengan kelas [^\t\n\f\v\r]
      \w ekivalen dengan kelas [a-zA-Z0-9_]
      \W ekivalen dengan kelas [^a-zA-Z0-9_]
  • Metakarakter  .akan cocok dengan semua karakter kecuali karakter newline
  • Selanjutnya metakarakter  |  yang memiliki makna OR (atau). Misalnya ekpresi reguler A|B akan cocok dengan ‘A’ atau ‘B’.
  • metakarakter  *  yang digunakan untuk pengulangan karakter sebelum metakarakter ‘*’ sebanyak 0 kali atau lebih.
  • Misalnya ekspresi reguler cob*a akan cocok dengan ‘cob’(‘b’ 0 kali), ’coba’(‘b’ 1 kali), ’cobba’(‘b’ 2 kali) dst.
  • Berikutnya adalah metakarakter  + di mana fungsinya hampir sama dengan metakarakter ‘*’. Perbedaannya adalah di mana metakarakter ‘+’ hanya memperbolehkan pengulangan minimal 1 kali, sedangkan metakarakter ‘*’ memperbolehkan pengulangan 0 kali.
    • Misalnya ekspresi reguler di atas ditulis ulang menjadi cob+a, maka ekpresi tersebut hanya akan cocok dengan ‘coba’(‘b’ 1 kali), ‘cobba’(‘b’ 2 kali) dst.
  • Berikutnya adalah metakarakter  ? yang memperbolehkan pengulangan minimal 0 kali dan maksimal 1 sekali.
    • Misalnya ekspresi reguler cob?a akan cocok dengan ‘coa’ dan ‘coba’.
  • Metakarakter  {dan  }. Penggunaan kedua metakarakter di atas sering ditulis {m,n} di mana m menyatakan banyaknya pengulangan minimal dan n menyatakan banyaknya pengulangan maksimal.
    • Sebagai contoh ekspresi cob{1,3}a akan cocok dengan ‘coba’(‘b’ 1 kali),’cobba’(‘b’ 2 kali),’cobbba’(‘b’ 3 kali). Jika nilai m tidak disertakan, maka defaultnya adalah 0. Sedangkan jika nilai n tidak disertakan maka default-nya adalah tidak terhingga (tergantung kapasitas memory). Dengan demikian, maka ekspresi {0,} identik dengan metakarakter ‘*’ , ekspresi {1,} identik dengan metakarakter ‘+’ dan ekspresi {0,1} identik dengan metakarakter ‘?’ .
  • Dan yang terakhir adalah metakarakter (dan  )Kedua metakarakter ini digunakan untuk menyatakan grup karakter. Misalnya ekpresi reguler (coba){1,3} akan cocok dengan ‘coba’, ‘cobacoba’ dan ‘cobacobacoba’

Package Regular Expression

Setelah kalian pelajari metakaraketer diatas, selanjutnya kita akan membahas penerapan regular expression yaitu menggunakan R yang secara default sudah ada di package re. Modul ini sudah ada pada versi 1.5 yang re aslinya merupakan modul yang ditulis dalam bahasa C yang kemudian di-import ke dalam Python. Selanjutnya kita akan melihat bagaimana penerapan regex dengan bahasa Python.

Regular Expression pada Python dikompilasi menjadi suatu instansi objek yang menyediakan metode-metode seperti matching, searching dan replacing serta fungsi-fungsi manipulasi teks lainnya. Untuk memakai regex ini, kita harus mengompilasinya dengan metode compile() dan bila ingin digunakan lagi, maka kita tidak perlu mengompilasi ulang regex tersebut, kita tinggal memakainya. Berikut contohnya:

import re
pattern = re.compile("coba*")

Ekspresi reguler dilewatkan sebagai paramater string pada perintah  re.compile() . Ada satu hal yang perlu diperhatikan ketika menggunakan karakter ‘\’.

  1. Misalkan kita ingin melakukan pencocokan dengan string ‘\abc’ maka expresi reguler yang tepat adalah \\abc.
  2. Namun sewaktu kita mengompilasi expresi reguler tersebut, perintah yang benar adalah re.compile(‘\\\\abc’) mengingat tanda ‘\’ dalam string Python juga memiliki makna tersendiri sehingga perlu ditambahkan dua buah karakter ‘\’ lagi. Untuk mengatasi masalah ini kita dapat menggunakan raw strings dengan menambahkan awalan r pada ekspresi reguler. Jadi perintah di atas dapat ditulis menjadi re.compile(r’\\abc’).

Kita akan menggunakannya dalam contoh-contoh selanjutnya. Python menawarkan dua operasi regex yang mendasar yakni match() dan search(). Perbedaan di antara keduanya,

  1. yakni match() hanya melakukan pencocokan pada awal string (atau tidak sama sekali),
  2. sedangkan search() mencari dari awal sampai akhir string dan berhenti jika telah menemukan string pertama yang cocok dari sebelah kiri.

Untuk fungsi metode match() dan search() ketika menemukan string yang cocok akan mengembalikan objek Match. Jika tidak menemukan string yang cocok, maka akan mengembalikan objek None. Untuk jelasnya, mari kita lihat contoh

Operasi Match

import re
pat = re.compile(r'Python')
m = pat.match("Python")
print (m)
print(m.string)

hasilnya

<_sre.SRE_Match object; span=(0, 6), match='Python'>
Python

artinya ditemukan cocok mulai dari index 0 sampai 6 pada string Python, namun berikut ini akan  menghasilkan None karena tidak ada pada kalimat pertama!

m = pat.match("Java dan Python")
print (m)

Kita akan coba menggunakan search

m = pat.search("Python")
print(m)

hasilnya

<_sre.SRE_Match object; span=(0, 6), match='Python'>

Validasi Alamat Email menggunakan Regex

Sekarang kita lanjutkan cara menggunakan meta karakter regex untuk validasi email

pat = re.compile(r'[\w.-]+@[\w.-]+')
while 1:
    email = input('Masukkan alamat email Anda : ')
    if pat.match(email):
        print ("Selamat, alamat email yang Anda  masukkan valid.")
        break
    else:
        print ("Maaf, alamat email yang Anda  masukkan tidak valid.")

Kode di atas bila dijalankan akan menghasilkan keluaran sebagai berikut:

Masukkan alamat email Anda : mulk#com
Maaf, alamat email yang Anda  masukkan tidak valid.

Masukkan alamat email Anda : softscients.com
Maaf, alamat email yang Anda  masukkan tidak valid.

Masukkan alamat email Anda : 
Selamat, alamat email yang Anda  masukkan valid.

Objek Match yang dihasilkan dari penerapan perintah match() dan search() mempunyai atribut dan metode sendiri
juga. Anda dapat melihatnya dengan perintah dir()

import re

pat = re.compile(r'[A-Z]yth?on')
s = "Saya sedang belajar Python dan Jython"
m = pat.search(s)
print(m)

hasil

<_sre.SRE_Match object; span=(20, 26), match='Python'>

Kita cek langsung dengan perintah dir()

dir(m)

hasilnya

['__class__',
 '__copy__',
 '__deepcopy__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'end',
 'endpos',
 'expand',
 'group',
 'groupdict',
 'groups',
 'lastgroup',
 'lastindex',
 'pos',
 're',
 'regs',
 'span',
 'start',
 'string']

Beberapa metode yang sering digunakan adalah group(), start(), end() dan span(). Metode group() mengembalikan string yang cocok dengan pola yang kita inginkan. Metode start() mengembalikan nilai indeks awal string yang cocok, sedangkan metode end() mengembalikan nilai indeks akhir dari string yang cocok. Metode span() mengembalikan tuple yang berisi nilai indeks awal dan akhir dari string yang cocok.  Kita coba seperti berikut kode dan hasilnya

>>> m.group()
'Python'
>>> m.start(), m.end()
(20,26)
>>> m.span()
(20,26)

Metode search() akan berhenti jika telah menemukan satu string yang cocok, bila kita ingin menemukan semua string yang cocok maka kita dapat menggunakan metode findall(). Kalian juga dapat menggunakan metode finditer() untuk mendapatkan nilai indeks awal dan akhir dari setiap string yang cocok.

m = pat.findall(s)
print(m)

hasil kode regex python diatas yaitu

['Python', 'Jython']

ataupun kalian bisa menggunakan iterator

iterator = pat.finditer(s)
for it in iterator:
    print(it)

hasilnya

<_sre.SRE_Match object; span=(20, 26), match='Python'>
<_sre.SRE_Match object; span=(31, 37), match='Jython'>

Modifikasi string pada regular expression Python

Modul re juga mendukung fungsi-fungsi modifikasi string, seperti metode split(), sub(), dan subn(). Kita akan bahas satu-persatu

Metode Split

Metode split() pada modul re sebenarnya hampir sama dengan metode split() pada objek string. Metode split() pada modul re ini berfungsi memecah/membagi bagian-bagian string setiap terjadi kecocokan dengan ekpresi reguler dan menempatkannya dalam objek list dan nilai kembaliannya berupa objek list tersebut.

Metode split memiliki dua parameter.

  • Parameter pertama adalah objek string yang hendak dicocokkan dan
  • Parameter kedua bersifat optional untuk menandakan maksimum dibagi berapa bagian. Nilai default untuk parameter kedua ini adalah 0. Misalkan kita mengisi parameter kedua ini dengan nilai 2, maka akan dibagi menjadi dua bagian dan sisanya akan dijadikan satu serta ikut dimasukkan dalam objek list yang terbentuk. Berikut contohnya:
import re
pat = re.compile(r'\W+')
h = pat.split("Saya sedang belajar Python")
print(h)
h2 = pat.split("Saya sedang belajar Python",2)
print(h2)

hasilnya regex kode python diatas yaitu

['Saya', 'sedang', 'belajar', 'Python']
['Saya', 'sedang', 'belajar Python']

Kita coba lagi dengan mengubah meta karakternya

pat = re.compile(r'a\w+')
h3 = pat.split("Saya sedang belajar Python")
print(h3)

hasilnya

['S', ' sed', ' bel', ' Python']

coba lagi dengan kalimat lain

pat = re.compile(r'y')
h4 = pat.split("Python, Ruby dan Tcl")
print(h4)

hasil

['P', 'thon, Rub', ' dan Tcl']

Metode Sub

Metode sub() akan mengganti semua substring yang cocok dengan ekpresi reguler yang diberikan dengan string baru yang kita inginkan. Metode sub() juga memiliki tiga parameter.

  • Parameter pertama adalah string pengganti,
  • Parameter kedua berupa string yang hendak diganti dan
  • Parameter ketiga bersifat opsional untuk menandakan berapa kali akan terjadi pergantian string. Nilai default untuk parameter ketiga ini adalah 0 menandakan bahwa semua string yang cocok dengan ekspresi reguler akan diganti. Berikut contohnya:
pat = re.compile(r'((P|J)+\w*|Ru+\w*)')
s = "Saya belajar Python, Jython dan Ruby"
h = pat.sub("bahasa scripting",s)
print(h)

hasil

Saya belajar bahasa scripting, bahasa scripting dan bahasa scripting

kalau dimasukan dengan paramater berikut

h2 = pat.sub("bahasa scripting",s,2)
print(h2)

hasil

Saya belajar bahasa scripting, bahasa scripting dan Ruby

Metode Subn

Metode subn() sebenarnya sama dengan metode sub(). Hanya saja nilai kembalian dari metode subn() ini berupa sebuah tuple yang mengandung dua elemen, yakni string perubahan yang dihasilkan dan banyaknya pergantian yang terjadi. Berikut contohnya:

h3 = pat.subn("bahasa scripting",s)
print(h3)

hasil

('Saya belajar bahasa scripting, bahasa scripting dan bahasa scripting', 3)

Regular Expression memang menawarkan berbagai kemampuan manipulasi teks yang baik, akan tetapi juga mempunyai keterbatasan. Regular Expression mempunyai batasan di mana tidak bisa melakukan pattern-matching pada data yang bersarang dan bertingkat seperti pada HTML dan XML yang menggunakan sistem parsing. Adakalanya ada hal yang bisa dilakukan oleh regex, namun ekspresi regulernya akan menjadi sangat rumit. Bila hal tersebut terjadi, kalian lebih baik membuat sendiri fungsi tersebut dalam bahasa Python yang tentunya akan lebih mudah dimengerti. Dalam hal ini, tentunya Anda bisa memilih kapan kita membutuhkan regular expression. Setiap hal pasti memiliki kelebihan dan kekurangan masing-masing

ref:  www.infolinux.co.id

Apa itu Regex di Python?

Regular expression adalah sebuah domain specific language (DSL) yang hadir sebagai sebuah library pada kebanyakan bahasa pemrograman, bukan hanya pada python. contoh: sebuah string memiliki format sebuah alamat email. contoh: mengganti semua ejaan American ke British.

Modul apa dalam python untuk menjalankan regex?

Python memiliki modul re untuk melakukan hal – hal yang berkaitan dengan regex. Tapi sebelum itu, kita harus mempelajari terlebih dahulu cara menggunakan regex ini.

Apa itu file regex?

Regex adalah singkatan dari Regular Expresion. Regex merupakan sebuah teks (string) yang mendefinisikan sebuah pola pencarian sehingga dapat membantu kita untuk melakukan matching (pencocokan), locate (pencarian), dan manipulasi teks.

Apa itu Findall?

Fungsi findall() mengembalikan daftar yang berisi semua kecocokan. Daftar berisi kecocokan dalam urutan ditemukannya. Jika tidak ada kecocokan yang ditemukan, maka akan mengembalikan daftar kosong.