Ungkapan Biasa dalam Python
Artikel ini menerangkan ungkapan biasa dalam Python.
Kami akan merangkumi pelbagai topik, daripada penggunaan asas modul re hingga pencocokan corak ungkapan biasa yang kompleks.
YouTube Video
Ungkapan Biasa dalam Python
Modul re digunakan untuk mencari dan memanipulasi rentetan menggunakan ekspresi biasa.
Apakah modul re?
Modul re disertakan dalam perpustakaan standard Python dan menyediakan fungsi untuk memanipulasi rentetan menggunakan ungkapan biasa. Ungkapan biasa digunakan untuk mencari, mengekstrak, atau menggantikan corak rentetan tertentu dengan cekap.
Corak Ungkapan Biasa Asas
Ungkapan biasa mentakrifkan corak dengan menggunakan simbol khas. Berikut adalah beberapa corak asas.
.: Sebarang satu aksara^: Permulaan rentetan$: Akhir rentetan\d: Sebarang digit (0-9)\w: Sebarang aksara perkataan (a-z, A-Z, 0-9, _)\s: Sebarang aksara ruang kosong*: Sifar atau lebih pengulangan+: Satu atau lebih pengulangan[]: Kelas aksara (contohnya,[a-z]memadankan abjad huruf kecil)
1import re
2
3pattern = r"\d{3}-\d{4}"
4text = "My postal code is 123-4567."
5result = re.search(pattern, text)
6if result:
7 print(result.group()) # Output: 123-4567
8
9# Define a pattern using basic regular expression symbols
10pattern = r"^\w+\s\d+\s[a-zA-Z]+$"
11
12# Example text to test the pattern
13text = "Room 23 Tokyo"
14
15# Check if the pattern matches the text
16result = re.match(pattern, text)
17if result:
18 print("Matched:", result.group())
19else:
20 print("No match")- Kod ini terlebih dahulu memeriksa sama ada rentetan sepadan dengan pola kod pos. Seterusnya, ia memeriksa sama ada keseluruhan rentetan (dari awal hingga akhir) sepadan dengan pola yang terdiri daripada satu perkataan, ruang kosong, digit, ruang kosong, dan satu perkataan bahasa Inggeris. Ini membantu anda memahami bagaimana unsur asas ungkapan biasa boleh digabungkan.
Cara Menggunakan Fungsi Pencocokan
re.match()
re.match() menyemak jika permulaan rentetan sepadan dengan corak yang ditentukan.
1import re
2
3pattern = r"\w+"
4text = "Python is powerful"
5match = re.match(pattern, text)
6if match:
7 print(match.group()) # Output: Python- Kod ini memeriksa sama ada rentetan bermula dengan aksara perkataan (alfa-numerik atau garis bawah). Perkataan pertama 'Python' sepadan dengan pola dan dipaparkan.
re.search()
re.search() memeriksa seluruh rentetan dan mengembalikan padanan pertama.
1import re
2
3pattern = r"powerful"
4text = "Python is powerful and versatile"
5search = re.search(pattern, text)
6if search:
7 print(search.group()) # Output: powerful- Kod ini mencari keseluruhan rentetan untuk perkataan 'powerful' dan mengembalikan padanan pertama. Hasilnya,
re.search()mengembalikan rentetan padanan 'powerful'.
re.findall()
re.findall() mengembalikan semua padanan corak sebagai senarai.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.findall(pattern, text)
6print(matches) # Output: ['Python', 'strong']- Kod ini mencari semua perkataan yang panjangnya tepat enam aksara dan mengembalikannya sebagai senarai. 'Python' dalam rentetan memenuhi syarat, dan senarai
['Python']dikembalikan.
re.finditer()
re.finditer() mengembalikan semua padanan sebagai iterator, yang membolehkan anda mendapatkan maklumat terperinci untuk setiap padanan.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.finditer(pattern, text)
6for match in matches:
7 print(match.group()) # Output: Python- Kod ini mencari semua perkataan enam huruf secara berurutan dan memproses setiap padanan melalui iterator. 'Python' sepadan dengan pola di sini dan dipaparkan.
Penggantian dan Pemisahan
re.sub()
re.sub() menggantikan bahagian rentetan yang sepadan dengan ekspresi biasa kepada rentetan lain.
1import re
2
3pattern = r"\d+"
4text = "There are 100 apples"
5new_text = re.sub(pattern, "many", text)
6print(new_text) # Output: There are many apples- Kod ini menggantikan semua digit dalam rentetan dengan 'many'.
re.split()
re.split() membahagikan rentetan pada bahagian yang sepadan dengan ekspresi biasa.
1import re
2
3pattern = r"\s+"
4text = "Python is powerful"
5parts = re.split(pattern, text)
6print(parts) # Output: ['Python', 'is', 'powerful']- Kod ini memecahkan rentetan pada satu atau lebih aksara ruang kosong. Akibatnya, rentetan dipecahkan kepada perkataan, menghasilkan
['Python', 'is', 'powerful'].
Kumpulan dan Tangkap
Menggunakan pengelompokan ekspresi biasa memudahkan untuk mengekstrak rentetan kecil yang sepadan. Melingkari dalam kurungan () menangkapnya sebagai satu kumpulan.
1import re
2
3pattern = r"(\d{3})-(\d{4})"
4text = "My postal code is 123-4567."
5match = re.search(pattern, text)
6if match:
7 print(match.group(1)) # Output: 123
8 print(match.group(2)) # Output: 4567- Kod ini mengekstrak nombor 3 digit dan 4 digit sebagai kumpulan berasingan daripada kod pos dalam bentuk '123-4567'.
group(1)mengembalikan tiga digit pertama '123', dangroup(2)mengembalikan empat digit terakhir '4567'.
Kumpulan bernama
Menggunakan kumpulan bernama membolehkan anda mendapatkan nilai mengikut nama yang bermakna dan bukannya bergantung pada indeks. Di bawah ialah contoh khusus yang mengekstrak tarikh dan tahap daripada log.
1import re
2
3log = "2025-10-25 14:00:01 [ERROR] Something failed"
4
5pattern = r"(?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}) \[(?P<level>[A-Z]+)\] (?P<msg>.*)"
6m = re.search(pattern, log)
7if m:
8 print(m.group("date"), m.group("time"), m.group("level"))
9 print("message:", m.group("msg"))- Kod ini menggunakan kumpulan bernama untuk mengekstrak tarikh, masa, tahap, dan mesej daripada rentetan log. Ia mendapatkan nilai menggunakan nama yang bermakna dan bukannya indeks.
Menggunakan Pilihan Bendera
Modul re mempunyai beberapa pilihan bendera untuk mengawal kelakuan pencarian.
re.IGNORECASE(re.I): Pilihan bendera yang menjadikan padanan tidak sensitif kes huruf.re.MULTILINE(re.M): Pilihan bendera yang membolehkan padanan merentasi pelbagai baris.re.DOTALL(re.S): Pilihan bendera di mana titik.juga memadankan aksara baris baru.
1import re
2
3pattern = r"python"
4text = "Python is powerful"
5match = re.search(pattern, text, re.IGNORECASE)
6if match:
7 print(match.group()) # Output: Python- Kod ini mencari perkataan 'python' tanpa mengira huruf besar/kecil. Dengan menggunakan bendera
re.IGNORECASE, ia juga memadankan 'Python'.
Kelebihan objek ungkapan biasa (re.compile)
Menyusun pola dengan re.compile menjadikannya lebih cekap untuk digunakan semula dan meningkatkan kebolehbacaan. Anda juga boleh menetapkan bendera di sini.
Contoh berikut berulang kali mencari padanan merentasi berbilang baris menggunakan pola yang telah disusun. Jika anda kerap menggunakan pola yang sama, menyusunnya dengan re.compile akan meningkatkan prestasi.
1import re
2
3pattern = re.compile(r"User: (\w+), ID: (\d+)")
4text = "User: alice, ID: 1\nUser: bob, ID: 2"
5
6for m in pattern.finditer(text):
7 print(m.groups())- Kod ini menggunakan ungkapan biasa yang telah disusun untuk mengekstrak nama pengguna dan ID daripada berbilang baris.
re.compilemeningkatkan kecekapan apabila menggunakan semula pola yang sama dan turut menjadikan kod lebih mudah dibaca.
Aplikasi
Sebagai contoh, pertimbangkan skrip yang mengekstrak semua alamat e-mel dari fail teks.
1import re
2
3pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
4text = "Contact us at info@example.com or support@service.com."
5emails = re.findall(pattern, text)
6print(emails) # Output: ['info@example.com', 'support@service.com']- Kod ini mencari semua alamat e-mel dalam rentetan dan mengekstraknya sebagai senarai.
Kesimpulan
Modul re adalah alat yang kuat untuk manipulasi rentetan dalam Python. Di sini, kami telah merangkumi pelbagai topik dari penggunaan asas hingga ekspresi biasa lanjutan menggunakan pengelompokan dan pilihan bendera. Ungkapan biasa Python sangat berkuasa dan merupakan alat yang tidak boleh diketepikan untuk pemprosesan teks.
Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.