Regex Assertion adalah pattern matching dengan melihat pattern disekitarnya. Ada 4 macam yaitu:
- Positive lookahead
- Negative lookahead
- Positive lookbehind
- Negative lookbehind
Syntax umum dari assertions adalah
#Positive lookahead
(?=assertions_pattern_goeshere)
#Negative lookahead
(?!assertions_pattern_goeshere)
#Positive lookbehind
(?<=assertions_pattern_goeshere)
#Negative lookbehind
(?<!assertions_pattern_goeshere)
Positive lookahead
Pattern akan match, jika pattern berikutnya mengikuti aturan tertentu. Contoh, match kata Euro, jika kata euro diikuti pattern tertentu. Pada contoh, akan match Euro pada kata europe, tidak match pada Euro diawal kalimat.
import re str = "Euro adalah mata uang yang digunakan dinegara Europe." pattern = r"Euro(?=[a-z]+)" result = re.findall(pattern, str)
['Euro']
Negative lookahead
Pattern akan match jika, pattern berikutnya TIDAK mengikuti aturan pattern tertentu.
Masih menggunakan contoh diatas, kali ini kita akan match jika kata Euro tidak diikuti pattern tertentu. Jadi kata Euro pada awal kalimat yang akan match.
str = "Euro adalah mata uang yang digunakan dinegara Europe." pattern = r"Euro(?![a-z]+)" result = re.findall(pattern, str)
['Euro']
Silakan bereksperimen dengan mengubah str target dengan mengubah kata Euro dan Europe. Coba juga dengan mengubah pattern tanpa assertion.
Positive Lookbehind
Pattern akan match jika pattern sebelumnya match. Contoh match angka dengan pattern sebelumnya ada space. Pada contoh akan match 12, namun tidak match 11 karena tidak ada pattern space sebelumnya.
import re
str = "11 tidak akan match pada positive lookbehind, sedangkan 12 akan match"
pattern = r"(?<=\s)\d{1,}"
result = re.findall(pattern, str)
['12']
Negative Lookbehind
Adalah kebalikan dari positive lookbehind, yaitu pattern akan match jika pattern sebelumnya tidak mengikuti aturan pattern tertentu.
Contoh, match angka jika pattern sebelumnya bukan space. Akan match angka 11 dan 2 dari angka 12.
import re
str = "11 tidak akan match pada positive lookbehind, sedangkan 12 akan match"
pattern = r"(?<!\s)\d{1,}"
result = re.findall(pattern, str)
['11', '2']
Dengan berakhirnya modul ini, tutorial regular expression menggunakan Python sudah selesai. Semakin sering berlatih menggunakan pattern, akan semakin fasih dalam menggunakan regular expression. Semoga bermanfaat.