Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

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:

ExpressionStringMatched?
^a...s$absNo match
aliasMatch
abyssMatch
AliasNo match
An abacusNo 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.

ExpressionStringMatched?
[abc]a1 match
ac2 matches
Hey JudeNo match
abc de ca5 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.

ExpressionStringMatched?
..aNo match
ac1 match
acd1 match
acde2 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.

ExpressionStringMatched?
^aa1 match
abc1 match
bacNo match
^ababc1 match
acbNo match (starts with a but not followed by b)
ExpressionStringMatched?
a$a1 match
formula1 match
cabNo match

Quantifiers: *, +, ?, {n,m}

Simbol ini mengontrol berapa kali elemen sebelumnya harus muncul.

Contoh:

ExpressionStringMatched?
ma*nmn1 match
man1 match
maaan1 match
mainNo match (a is not followed by n)
woman1 match
ExpressionStringMatched?
ma+nmnNo match (no a)
man1 match
maaan1 match
mainNo match (a is not followed by n)
woman1 match
ExpressionStringMatched?
ma?nmn1 match
man1 match
maaanNo match (more than one a)
mainNo match (a is not followed by n)
woman1 match
ExpressionStringMatched?
a{2,3}abc datNo match
abc daat1 match (at daat)
aabc daaat2 matches (at aabc and daaat)
aabc daaaat2 matches (at aabc and daaaat)

Pola yang sering digunakan: [0-9]{2,4} cocok dengan dua hingga empat digit berturut-turut.

ExpressionStringMatched?
[0-9]{2,4}ab123csde1 match (at ab123csde)
12 and 3456733 matches (12, 3456, 73)
1 and 2No match

Alternation: |

Garis tegak melintang mengimplementasikan logika OR. Misalnya, a|b cocok dengan string apa pun yang berisi a atau b.

ExpressionStringMatched?
a|bcdeNo match
ade1 match (at ade)
acdbea3 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.

ExpressionStringMatched?
(a|b|c)xzab xzNo match
abxz1 match (at abxz)
axz cabxz2 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

ExpressionStringMatched?
\Athethe sunMatch
In the sunNo match

Word Boundary: \b

ExpressionStringMatched?
\bfoofootballMatch
a footballMatch
afootballNo match
foo\bthe fooMatch
the afoo testMatch
the afootestNo match

Non‑Word Boundary: \B

ExpressionStringMatched?
\BfoofootballNo match
a footballNo match
afootballMatch
foo\Bthe fooNo match
the afoo testNo match
the afootestMatch

Digit: \d / Non‑Digit: \D

ExpressionStringMatched?
\d12abc33 matches (at 12abc3)
PythonNo match
\D1ab34"503 matches (at 1ab34"50)
1345No match

Whitespace: \s / Non‑Whitespace: \S

ExpressionStringMatched?
\sPython RegEx1 match
PythonRegExNo match
\Sa b2 matches (at a b)
No match

Word Character: \w / Non‑Word: \W

ExpressionStringMatched?
\w12&": ;c 3 matches (at 12": ;c)
"%> !No match
\W1a2%c1 match (at 1a2%c)
PythonNo match

End of String: \Z

ExpressionStringMatched?
Python\ZI like Python1 match
I like Python ProgrammingNo 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:

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.

Python

  1. Kata Kunci dan Pengidentifikasi Python: Menguasai Kata Terjamin dan Konvensi Penamaan
  2. Menguasai Tipe Data Python: Panduan Praktis
  3. Menguasai Operator Python: Panduan Komprehensif
  4. Menguasai Argumen Fungsi Python: Posisi, Kata Kunci, dan Parameter Default
  5. Menguasai Kamus Python: Pembuatan, Manipulasi, dan Teknik Lanjutan
  6. Menguasai Iterator Python: Cara Kerja dan Membuat Sendiri
  7. Penutupan (Closure) Python Dijelaskan: Cara Fungsi Bertingkat Mengambil Variabel
  8. Menguasai Python datetime: Panduan Praktis Tanggal, Waktu, dan Zona Waktu
  9. Menguasai Modul time Python: Fungsi, Structs, dan Contoh Praktis
  10. Menguasai time.sleep() Python: Best Practices, Multithreading, dan Contoh Dunia Nyata