PYTHON REGEX
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Biểu thức chính quy (Regex) trong Python

Biểu thức chính quy (regex) là một công cụ mạnh mẽ và linh hoạt được sử dụng rộng rãi trong lập trình để xác định và xử lý các mẫu chuỗi phức tạp. Trong nhiều ứng dụng thực tế, từ các công cụ tìm kiếm cho đến các hộp thoại tìm và thay thế của các trình soạn thảo văn bản, biểu thức chính quy đóng vai trò quan trọng trong việc xử lý văn bản. Python, một ngôn ngữ lập trình phổ biến, cung cấp một module tích hợp sẵn tên là re để hỗ trợ làm việc với biểu thức chính quy. Trong bài viết này, mình sẽ tìm hiểu cách sử dụng biểu thức chính quy trong Python, từ các mẫu đơn giản đến phức tạp, và cách áp dụng chúng để giải quyết các vấn đề thực tiễn. Bạn sẽ được tìm hiểu về các hàm phổ biến trong module re và cách sử dụng chúng một cách hiệu quả để tối ưu hóa mã của bạn. Hãy cùng bắt đầu hành trình tìm hiểu biểu thức chính quy trong Python để làm cho việc xử lý văn bản trở nên dễ dàng và hiệu quả hơn.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Giới thiệu về biểu thức chính quy trong Python

Biểu thức chính quy (regex hoặc regexp) là các mẫu tìm kiếm. Các ví dụ điển hình của biểu thức chính quy bao gồm các mẫu để khớp với địa chỉ email, số điện thoại, và số thẻ tín dụng.

Biểu thức chính quy thực chất là một ngôn ngữ lập trình chuyên biệt được nhúng trong Python. Bạn có thể tương tác với biểu thức chính quy thông qua module re tích hợp sẵn trong Python.

Screenshot 202024 07 06 20222243 png

Ví dụ về một biểu thức chính quy đơn giản

'\d'

Trong ví dụ này, biểu thức chính quy là một chuỗi chứa mẫu tìm kiếm. '\d' là một tập ký tự số khớp với bất kỳ chữ số nào từ 0 đến 9.

Bài viết này được đăng tại [free tuts .net]

Lưu ý rằng bạn sẽ học cách xây dựng các mẫu phức tạp và nâng cao hơn trong các hướng dẫn tiếp theo. Hướng dẫn này tập trung vào các hàm xử lý biểu thức chính quy.

Sử dụng biểu thức chính quy trong Python

Để sử dụng biểu thức chính quy, bạn làm theo các bước sau:

Import module re:

import re

Biên dịch biểu thức chính quy thành đối tượng Pattern:

p = re.compile('\d')

Sử dụng một trong các phương thức của đối tượng Pattern để khớp với chuỗi:

s = "Python 3.10 was released on October 04, 2021"
result = p.findall(s)

print(result)

Kết quả:

['3', '1', '0', '0', '4', '2', '0', '2', '1']

Phương thức findall() trả về một danh sách các chữ số đơn lẻ trong chuỗi s.

import re

p = re.compile('\d')
s = "Python 3.10 was released on October 04, 2021"

results = p.findall(s)
print(results)

Bên cạnh phương thức findall(), đối tượng Pattern còn có các phương thức quan trọng khác cho phép bạn khớp với một chuỗi:

Phương thức Mục đích
match() Tìm mẫu ở đầu chuỗi
search() Trả về match đầu tiên của mẫu trong chuỗi
findall() Trả về tất cả các match của mẫu trong chuỗi
finditer() Trả về tất cả các match của mẫu dưới dạng iterator

Các hàm biểu thức chính quy trong Python

Ngoài lớp Pattern, module re còn có một số hàm để khớp một chuỗi với một mẫu:

  • match()
  • search()
  • findall()
  • finditer()

Các hàm này có tên giống như các phương thức của đối tượng Pattern và cũng nhận các đối số tương tự. Tuy nhiên, bạn không cần phải biên dịch biểu thức chính quy trước khi sử dụng chúng.

Ví dụ sau đây cho thấy chương trình tương tự sử dụng hàm findall() thay vì phương thức findall() của đối tượng Pattern:

import re

s = "Python 3.10 was released on October 04, 2021."
results = re.findall('\d', s)
print(results)

Sử dụng các hàm trong module re gọn gàng hơn so với các phương thức của đối tượng Pattern vì bạn không phải biên dịch biểu thức chính quy thủ công.

Hàm search()

Hàm search() tìm kiếm một mẫu trong một chuỗi. Nếu có một match, nó trả về đối tượng Match đầu tiên hoặc None nếu không tìm thấy. Ví dụ:

import re

s = "Python 3.10 was released on October 04, 2021."
pattern = '\d{2}'
match = re.search(pattern, s)

print(type(match))
print(match)

Kết quả:

<class 're.Match'>
<re.Match object; span=(9, 11), match='10'>

Trong ví dụ này, hàm search() trả về hai chữ số đầu tiên trong chuỗi s dưới dạng đối tượng Match.

Đối tượng Match

Đối tượng Match cung cấp thông tin về chuỗi đã khớp. Nó có các phương thức quan trọng sau:

Phương thức Mô tả
group() Trả về chuỗi đã khớp
start() Trả về vị trí bắt đầu của match
end() Trả về vị trí kết thúc của match
span() Trả về một tuple (start, end) chỉ định vị trí của match

Ví dụ sau đây kiểm tra đối tượng Match:

import re

s = "Python 3.10 was released on October 04, 2021."
result = re.search('\d', s)

print('Matched string:', result.group())
print('Starting position:', result.start())
print('Ending position:', result.end())
print('Positions:', result.span())

Kết quả:

Matched string: 3
Starting position: 7
Ending position: 8
Positions: (7, 8)

Hàm match()

Hàm match() trả về đối tượng Match nếu nó tìm thấy mẫu ở đầu chuỗi. Ví dụ:

import re

l = ['Python', 
    'CPython is an implementation of Python written in C', 
    'Jython is a Java implementation of Python',
    'IronPython is Python on .NET framework']

pattern = '\wython'
for s in l:
    result = re.match(pattern, s)
    print(result)

Kết quả:

<re.Match object; span=(0, 6), match='Python'>
None
<re.Match object; span=(0, 6), match='Jython'>
None

Trong ví dụ này, \w là tập ký tự từ khớp với bất kỳ ký tự nào.

'\wython' khớp với bất kỳ chuỗi nào bắt đầu bằng một ký tự từ duy nhất và theo sau là chuỗi ký tự ython, ví dụ: Python.

Chuỗi sau khớp với mẫu:

Python
Jython is a Java implementation of Python

Và chuỗi sau không khớp:

CPython is an implementation of Python written in C
IronPython is Python on .NET framework

Hàm fullmatch()

Hàm fullmatch() trả về đối tượng Match nếu toàn bộ chuỗi khớp với mẫu hoặc None nếu không khớp. Ví dụ sau đây sử dụng hàm fullmatch() để khớp một chuỗi với bốn chữ số:

import re

s = "2021"
pattern = '\d{4}'
result = re.fullmatch(pattern, s)
print(result)

Kết quả:

<re.Match object; span=(0, 4), match='2021'>

Mẫu '\d{4}' khớp với một chuỗi có bốn chữ số. Do đó, hàm fullmatch() trả về chuỗi 2021.

Nếu bạn đặt số 2021 ở giữa hoặc cuối chuỗi, hàm fullmatch() sẽ trả về None. Ví dụ:

import re

s = "Python 3.10 released in 2021"
pattern = '\d{4}'
result = re.fullmatch(pattern, s)
print(result)

Kết quả:

None

Biểu thức chính quy và chuỗi thô trong Python

Điều quan trọng cần lưu ý là Python và biểu thức chính quy là các ngôn ngữ lập trình khác nhau. Chúng có cú pháp riêng của mình.

Module re là giao diện giữa Python và ngôn ngữ lập trình biểu thức chính quy. Nó hoạt động như một bộ thông dịch giữa chúng.

Để xây dựng một mẫu, biểu thức chính quy thường sử dụng dấu gạch chéo ngược \ ví dụ \d\w. Nhưng điều này xung đột với việc sử dụng dấu gạch chéo ngược của Python cho mục đích tương tự trong chuỗi ký tự.

Ví dụ, giả sử bạn cần khớp chuỗi sau:

s = '\section'

Trong Python, dấu gạch chéo ngược (\) là một ký tự đặc biệt. Để xây dựng một biểu thức chính quy, bạn cần thoát các dấu gạch chéo ngược bằng cách đặt trước mỗi dấu gạch chéo ngược bằng một dấu gạch chéo ngược:

pattern = '\\section'

Trong biểu thức chính quy, mẫu phải là \\section. Tuy nhiên, để biểu diễn mẫu này trong chuỗi ký tự trong Python, bạn cần sử dụng thêm hai dấu gạch chéo ngược để thoát cả hai dấu gạch chéo ngược lần nữa:

pattern = '\\\\section'

Đơn giản mà nói, để khớp một dấu gạch chéo ngược (''), bạn phải viết \\\\ vì biểu thức chính quy phải là \\ và mỗi dấu gạch chéo ngược phải được biểu diễn dưới dạng \\ trong chuỗi ký tự Python.

Điều này dẫn đến nhiều dấu gạch chéo ngược lặp lại. Do đó, làm cho các biểu thức chính quy khó đọc và hiểu.

Một giải pháp là sử dụng chuỗi thô trong Python cho biểu thức chính quy vì chuỗi thô xử lý dấu gạch chéo ngược (\) như một ký tự bình thường, không phải ký tự đặc biệt.

Để biến chuỗi thông thường thành chuỗi thô, bạn đặt trước nó bằng chữ r hoặc R. Ví dụ:

import re

s = '\section'
pattern = r'\\section'
result = re.findall(pattern, s)

print(result)

Kết quả:

['\\section']

Lưu ý rằng trong Python '\section''\\section' là như nhau:

p1 = '\\section'
p2 = '\section'

print(p1 == p2)  # true

Trong thực tế, bạn sẽ thấy các biểu thức chính quy được xây dựng trong Python sử dụng chuỗi thô.

Kết bài

Biểu thức chính quy là một công cụ mạnh mẽ trong Python, cho phép bạn xác định và xử lý các mẫu chuỗi phức tạp một cách hiệu quả. Bằng cách sử dụng đối tượng Pattern hoặc các hàm trong module re, bạn có thể dễ dàng tìm kiếm và thao tác với các mẫu chuỗi trong văn bản. Để tránh những rắc rối khi phải thoát các ký tự đặc biệt, việc sử dụng chuỗi thô (raw string) là một phương pháp hữu ích và tiện lợi.

Qua hướng dẫn này, bạn đã được làm quen với cách xây dựng và sử dụng biểu thức chính quy trong Python, từ những ví dụ đơn giản đến phức tạp. Với kiến thức này, bạn có thể áp dụng biểu thức chính quy vào nhiều tình huống thực tế, từ việc kiểm tra định dạng email, số điện thoại đến việc tìm kiếm và thay thế văn bản. Hy vọng rằng, bạn sẽ cảm thấy tự tin hơn trong việc sử dụng biểu thức chính quy để giải quyết các vấn đề về xử lý văn bản trong các dự án lập trình của mình.

Cùng chuyên mục:

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Cách nạp dữ liệu Machine Learning từ File trong Python

Cách nạp dữ liệu Machine Learning từ File trong Python

Hướng dẫn sử dụng Google Sheets API với Python

Hướng dẫn sử dụng Google Sheets API với Python

Xây dựng  web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn viết Snake Game bằng Python

Hướng dẫn viết Snake Game bằng Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng Python Debugger với hàm breakpoint()

Cách sử dụng Python Debugger với hàm breakpoint()

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hỗ trợ Async trong Django 3.1

Hỗ trợ Async trong Django 3.1

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

Ý nghĩa của if __name__ ==

Ý nghĩa của if __name__ == "__main__" trong Python

Cách xóa phần tử trong danh sách Python

Cách xóa phần tử trong danh sách Python

Top