Metacharacters Question Mark

Metacharacters question mark menunjukan repetesi 0 atau 1 untuk special character yang mendahuluinya.

Masih menggunakan contoh sebelumnya, pattern akan menggunakan tanda tanya, yaitu r”\d\d\d?”

Hasilnya agak sedikit berbeda, yaitu akan match angka dengan panjang 2 atau 3 digit.

import re

str = "Hari ini adalah tanggal 21 Januari 2021."
pattern = r"\d\d\d?"

result = re.findall(pattern, str)
['21', '202']

Sementara untuk contoh kedua, jika pattern diubah menjadi r”J\w?” hanya akan match kata yang diawali huruf besar J dan diikuti 0 atau 1 character alphanumeric.

pattern = r"j\w?"

result = re.findall(pattern, str)
['Ja']

Non Greedy

Metacharacter Question mark (?) bersifat non greedy. Dengan menambahkan question mark pada metacharacter greedy seperti asterisk dan plus sign, dapat mengubah menjadi non greedy.

Untuk lebih jelasnya, kita gunakan contoh pattern dari modul metacharacters asterisk, lalu tambahkan ? pada pattern.

import re

str = "Hari ini adalah tanggal 21 Januari 2021."
pattern = r"\d\d\d*?"

result = re.findall(pattern, str)
['21', '20', '21']

#Sebagai perbandingan pattern tanpa question mark

#pattern = r"\d\d\d*"
#result = re.findall(pattern, str)
#['21', '2021']

Silakan bereksperimen dengan metacharacter plus sign, atau coba juga dengan double question mark.

Sharing is caring:

Leave a Comment