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.

Alternation Regex trong Python

Một trong những tính năng mạnh mẽ của regex là khả năng thay thế (alternation), cho phép bạn khớp với một trong nhiều mẫu khác nhau. Tương tự như toán tử "OR" trong Python, alternation trong regex giúp bạn tạo ra các biểu thức linh hoạt và hiệu quả hơn. Trong bài viết này, bạn sẽ tìm hiểu cách sử dụng alternation trong regex của Python để giải quyết các bài toán khớp chuỗi phức tạp một cách dễ dàng và hiệu quả.

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ề alternation trong regex của Python

Để biểu diễn alternation trong các biểu thức chính quy, bạn sử dụng toán tử dấu gạch đứng (|). Toán tử này được gọi là thay thế (alternation). Nó giống như toán tử hoặc (or) trong Python.

Biểu thức chính quy sau đây sử dụng alternation để khớp với chuỗi đơn giản hoặc phức tạp:

'simple|complex'

Ví dụ, chương trình sau đây sử dụng biểu thức chính quy trên để khớp với chuỗi đơn giản hoặc phức tạp:

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

import re

s = 'simple is better than complex'
pattern = r'simple|complex'

matches = re.findall(pattern,s)
print(matches)

Kết quả:

['simple', 'complex']

Các ví dụ về alternation trong regex của Python

Hãy xem thêm một số ví dụ về sử dụng alternation trong regex.

Sử dụng alternation để khớp với thời gian ở định dạng hh

Để khớp với chuỗi thời gian ở định dạng hh, bạn có thể kết hợp tập ký tự \d với các bộ định lượng {}:

'\d{2}:\d{2}'

Trong mẫu này:

  • \d{2} khớp với hai chữ số.
  • : khớp với ký tự dấu hai chấm.
  • \d{2} khớp với hai chữ số.

Tuy nhiên, quy tắc \d{2} cũng khớp với số không hợp lệ, chẳng hạn như 99. Để khắc phục điều này, bạn có thể sử dụng alternation regex.

Nếu giờ hợp lệ từ 01 đến 23, bạn có thể sử dụng mẫu sau để khớp với phần giờ:

[01]\d|2[0-3]

Trong mẫu này:

  • [01] khớp với một chữ số 0 hoặc 1.
  • \d khớp với một chữ số từ 0 đến 9.
  • [01]\d khớp với 00, 01 đến 19.
  • 2 khớp với chữ số 2.
  • [0-3] khớp với một chữ số từ 0 đến 3 bao gồm 0, 1, 2, 3.
  • 2[0-3] khớp với các số 20, 21, 22, và 23.

Vì phút hợp lệ từ 00 đến 59, bạn có thể sử dụng mẫu sau để khớp với phần phút:

[0-5]\d

Biểu thức chính quy sau đây kết hợp hai quy tắc trên để khớp với thời gian ở định dạng hh:mm:

'[01]\d|2[0-3]:[0-5]\d'

Tuy nhiên, biểu thức chính quy này sẽ không hoạt động như mong đợi. Ví dụ:

import re

s = '09:30 30:61 22:30 25:99'
pattern = r'[01]\d|2[0-3]:[0-5]\d'

matches = re.finditer(pattern, s)
for match in matches:
    print(match.group())

Kết quả:

09
22:30

Trong ví dụ này, công cụ regex xử lý mẫu [01]\d|2[0-3]:[0-5]\d như hai phần chính được tách biệt bởi dấu alternation:

  • [01]\d
  • 2[0-3]):([0-5]\d)

Để khắc phục điều này, bạn cần đặt dấu ngoặc đơn xung quanh phần alternation để biểu diễn rằng chỉ phần đó được alternation, không phải toàn bộ biểu thức:

([01]\d|2[0-3]):[0-5]\d

Bây giờ, chương trình hoạt động như mong đợi:

import re

s = '09:30 30:61 22:30 25:99'
pattern = r'([01]\d|2[0-3]):[0-5]\d'

matches = re.finditer(pattern, s)
for match in matches:
    print(match.group())

Kết quả:

09:30
22:30

Kết bài

Alternation regex X | Y khớp với X hoặc Y, tương tự như toán tử "OR" trong các biểu thức chính quy. Điều này giúp bạn dễ dàng xây dựng các mẫu linh hoạt để khớp với nhiều lựa chọn khác nhau. Để đảm bảo chỉ một phần của biểu thức được alternation, hãy đặt phần alternation bên trong dấu ngoặc đơn (). Hiểu và áp dụng đúng alternation trong regex của Python sẽ giúp bạn xử lý chuỗi dữ liệu hiệu quả hơn, mở rộng khả năng kiểm tra và làm sạch dữ liệu trong nhiều tình huống lập trình khác nhau.

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