Ekspresi Reguler Python (Modul re) – Panduan Praktis
Python Regular Expressions (re Module) – A Practical Guide
Temukan cara memanfaatkan kekuatan ekspresi reguler di Python dengan modul re. Contoh langkah demi langkah mengilustrasikan pola umum, teknik pencocokan, dan fungsi lanjutan.
What Is a Regular Expression?
Sebuah regular expression (RegEx) adalah sekuens karakter yang mendefinisikan pola pencarian. Misalnya, pola ^a...s$ cocok dengan string lima huruf yang dimulai dengan a dan diakhiri dengan s.
^a...s$
Pola dapat digunakan untuk mencocokkan dengan string. Tabel berikut menunjukkan bagaimana pola berperilaku dengan masukan yang berbeda:
| Expression | String | Matched? |
|---|
^a...s$ | abs | No match |
alias | Match |
abyss | Match |
Alias | No match |
An abacus | No match |
Modul re Python menyediakan alat yang Anda butuhkan untuk bekerja dengan RegEx. Berikut adalah contoh cepat yang menggunakan re.match() untuk memeriksa pola terhadap string:
import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
print("Search successful.")
else:
print("Search unsuccessful.")
Saat pola ditemukan, re.match() mengembalikan objek match; jika tidak, ia mengembalikan None.
Specifying Patterns with Metacharacters
Metacharacters adalah simbol khusus yang diinterpretasikan oleh mesin regex dengan cara unik. Berikut adalah referensi cepat untuk metacharacter yang paling umum:
[] . ^ $ * + ? {} () \ |
Square Brackets: []
Kurung siku mendefinisikan himpunan karakter untuk dicocokkan. Misalnya, [abc] cocok dengan kemunculan tunggal dari a, b, atau c.
| Expression | String | Matched? |
|---|
[abc] | a | 1 match |
ac | 2 matches |
Hey Jude | No match |
abc de ca | 5 matches |
Rentang dapat diungkapkan dengan tanda hubung, misalnya, [a-e] sama dengan [abcde]. Untuk membalikkan himpunan, tempatkan caret ^ setelah kurung pembuka, misalnya, [^abc] cocok dengan karakter apa pun selain a, b, atau c.
Period: .
Titik cocok dengan satu karakter apa pun kecuali newline.
| Expression | String | Matched? |
|---|
.. | a | No match |
ac | 1 match |
acd | 1 match |
acde | 2 matches (contains 4 characters) |
Caret: ^ and Dollar: $
Caret mengakui awal string; tanda dolar mengakui akhir. Misalnya, ^a cocok dengan string yang dimulai dengan a, sedangkan a$ cocok dengan string yang diakhiri dengan a.
| Expression | String | Matched? |
|---|
^a | a | 1 match |
abc | 1 match |
bac | No match |
^ab | abc | 1 match |
acb | No match (starts with a but not followed by b) |
| Expression | String | Matched? |
|---|
a$ | a | 1 match |
formula | 1 match |
cab | No match |
Quantifiers: *, +, ?, {n,m}
Simbol ini mengontrol berapa kali elemen sebelumnya harus muncul.
* – nol atau lebih kali.+ – satu atau lebih kali.? – nol atau satu kali.{n,m} – paling sedikit n dan paling banyak m kali.
Contoh:
| Expression | String | Matched? |
|---|
ma*n | mn | 1 match |
man | 1 match |
maaan | 1 match |
main | No match (a is not followed by n) |
woman | 1 match |
| Expression | String | Matched? |
|---|
ma+n | mn | No match (no a) |
man | 1 match |
maaan | 1 match |
main | No match (a is not followed by n) |
woman | 1 match |
| Expression | String | Matched? |
|---|
ma?n | mn | 1 match |
man | 1 match |
maaan | No match (more than one a) |
main | No match (a is not followed by n) |
woman | 1 match |
| Expression | String | Matched? |
|---|
a{2,3} | abc dat | No match |
abc daat | 1 match (at daat) |
aabc daaat | 2 matches (at aabc and daaat) |
aabc daaaat | 2 matches (at aabc and daaaat) |
Pola yang sering digunakan: [0-9]{2,4} cocok dengan dua hingga empat digit berturut-turut.
| Expression | String | Matched? |
|---|
[0-9]{2,4} | ab123csde | 1 match (at ab123csde) |
12 and 345673 | 3 matches (12, 3456, 73) |
1 and 2 | No match |
Alternation: |
Garis tegak melintang mengimplementasikan logika OR. Misalnya, a|b cocok dengan string apa pun yang berisi a atau b.
| Expression | String | Matched? |
|---|
a|b | cde | No match |
ade | 1 match (at ade) |
acdbea | 3 matches (at acdbea) |
Grouping: ()
Kurung mengelompokkan sub-pola dan menangkap substring yang dicocokkan. Contoh: (a|b|c)xz cocok dengan string apa pun yang berisi a, b, atau c diikuti oleh xz.
| Expression | String | Matched? |
|---|
(a|b|c)xz | ab xz | No match |
abxz | 1 match (at abxz) |
axz cabxz | 2 matches (at axzbc cabxz) |
Escaping: \
Gunakan backslash untuk memperlakukan metacharacter sebagai literal. Misalnya, \$a cocok dengan urutan literal $a alih-alih menginterpretasikan $ sebagai anchor end-of-string.
Special Sequences
Special sequences menyederhanakan pola umum. Berikut adalah daftar referensi dengan contoh ilustratif.
Start of String: \A
| Expression | String | Matched? |
|---|
\Athe | the sun | Match |
In the sun | No match |
Word Boundary: \b
| Expression | String | Matched? |
|---|
\bfoo | football | Match |
a football | Match |
afootball | No match |
foo\b | the foo | Match |
the afoo test | Match |
the afootest | No match |
Non‑Word Boundary: \B
| Expression | String | Matched? |
|---|
\Bfoo | football | No match |
a football | No match |
afootball | Match |
foo\B | the foo | No match |
the afoo test | No match |
the afootest | Match |
Digit: \d / Non‑Digit: \D
| Expression | String | Matched? |
|---|
\d | 12abc3 | 3 matches (at 12abc3) |
Python | No match |
\D | 1ab34"50 | 3 matches (at 1ab34"50) |
1345 | No match |
Whitespace: \s / Non‑Whitespace: \S
| Expression | String | Matched? |
|---|
\s | Python RegEx | 1 match |
PythonRegEx | No match |
\S | a b | 2 matches (at a b) |
| No match |
Word Character: \w / Non‑Word: \W
| Expression | String | Matched? |
|---|
\w | 12&": ;c | 3 matches (at 12": ;c) |
"%> ! | No match |
\W | 1a2%c | 1 match (at 1a2%c) |
Python | No match |
End of String: \Z
| Expression | String | Matched? |
|---|
Python\Z | I like Python | 1 match |
I like Python Programming | No match |
Python is fun. | No match |
Tip: Gunakan penguji regex online seperti regex101 untuk merancang dan mendebug pola dengan cepat.
Using RegEx in Python
Modul re Python menawarkan serangkaian fungsi dan konstanta yang kaya untuk operasi regex. Impor dengan:
import re
Di bawah ini adalah utilitas yang paling umum dan cara menggunakannya.
re.findall()
Mengembalikan daftar semua kecocokan yang tidak tumpang tindih dalam sebuah string.
# Extract all numbers from a string
import re
string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'
result = re.findall(pattern, string)
print(result) # Output: ['12', '89', '34']
Ketika tidak ada kecocokan yang ditemukan, daftar kosong dikembalikan.
re.split()
Memecah string di setiap titik di mana pola cocok, mengembalikan daftar substring.
import re
string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'
result = re.split(pattern, string)
print(result) # Output: ['Twelve:', ' Eighty nine:', '.']
Gunakan argumen opsional maxsplit untuk membatasi jumlah pecahan. Nilai 0 (default) memecah pada setiap kecocokan.
import re
string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'
# Split only at the first occurrence
result = re.split(pattern, string, 1)
print(result) # Output: ['Twelve:', ' Eighty nine:89 Nine:9.']
re.sub()
Menggantikan semua kemunculan pola dengan string pengganti.
# Remove all whitespace characters
import re
string = 'abc 12\nde 23 \n f45 6'
pattern = '\s+'
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string) # Output: abc12de23f456
Untuk membatasi penggantian, berikan argumen count. Nilai 0 mengganti setiap kecocokan.
new_string = re.sub(r'\s+', replace, string, 1)
print(new_string) # Output: # abc12de 23 # f45 6
re.subn()
Seperti re.sub(), tetapi mengembalikan tuple yang berisi string baru dan jumlah substitusi yang dilakukan.
new_string = re.subn(pattern, replace, string)
print(new_string) # Output: ('abc12de23f456', 4)
re.search()
Menemukan lokasi pertama di mana pola cocok.
string = "Python is fun"
match = re.search('\\APython', string)
if match:
print("pattern found inside the string")
else:
print("pattern not found")
# Output: pattern found inside the string
Match Object
Saat kecocokan ditemukan, re.search() mengembalikan objek Match. Metode dan atribut umum meliputi:
group() – substring yang dicocokkan.start() / end() – indeks kecocokan.span() – tuple dari (start, end).groups() – semua captured groups.
string = '39801 356, 2102 1111'
pattern = '(\\d{3}) (\\d{2})'
match = re.search(pattern, string)
if match:
print(match.group())
print(match.group(1))
print(match.group(2))
print(match.groups())
print(match.start(), match.end(), match.span())
else:
print("pattern not found")
# Output:
# 801 35
# 801
# 35
# ('801', '35')
# 2 8 (2, 8)
Using Raw Strings (prefix r)
Menambahkan awalan r pada literal string memperlakukan backslash sebagai karakter literal, mencegah escape sequence yang tidak sengaja. Ini sangat berguna dalam pola regex.
string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string)
print(result) # Output: ['\n', '\r']
Untuk eksplorasi lebih dalam tentang modul re, lihat dokumentasi resmi Python.