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.

Hàm sub() của Regex trong Python

Trong lập trình Python, việc xử lý các chuỗi ký tự phức tạp là một yêu cầu thường xuyên và quan trọng. Để giải quyết vấn đề này một cách hiệu quả, Python cung cấp module re hỗ trợ làm việc với các biểu thức chính quy (regex). Một trong những hàm hữu ích của module này là sub(). Hàm sub() cho phép thay thế các phần của chuỗi khớp với một mẫu regex cụ thể bằng một giá trị thay thế mới. Điều này rất hữu ích trong nhiều tình huống, từ việc định dạng lại dữ liệu cho đến việc lọc và thay thế nội dung trong văn bản. Hãy cùng tìm hiểu chi tiết cách sử dụng hàm sub() trong Python qua các ví dụ cụ thể.

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ề hàm sub() trong Python regex

sub() là một hàm trong module re của Python, được sử dụng để xử lý các biểu thức chính quy. Hàm sub() có cú pháp như sau:

re.sub(pattern, repl, string, count=0, flags=0)

Trong cú pháp này:

  • pattern là biểu thức chính quy bạn muốn tìm kiếm. Ngoài một biểu thức chính quy, pattern có thể là một đối tượng Pattern.
  • repl là giá trị thay thế.
  • string là chuỗi đầu vào.
  • Tham số count chỉ định số lượng tối đa các mẫu khớp mà hàm sub() sẽ thay thế. Nếu bạn truyền giá trị 0 hoặc bỏ qua tham số này, hàm sub() sẽ thay thế tất cả các mẫu khớp.
  • flags là một hoặc nhiều cờ của regex, giúp thay đổi hành vi mặc định của biểu thức chính quy.

Hàm sub() tìm kiếm các mẫu trong chuỗi và thay thế các chuỗi khớp với giá trị thay thế (repl). Nếu hàm sub() không tìm thấy mẫu khớp nào, nó sẽ trả về chuỗi gốc. Ngược lại, hàm sub() sẽ trả về chuỗi sau khi thay thế các mẫu khớp.

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

Lưu ý rằng, hàm sub() thay thế các mẫu khớp không chồng lấp từ trái sang phải. Bạn sẽ thấy rõ điều này trong các ví dụ sau đây.

Các ví dụ về hàm sub() trong Python regex

Hãy cùng xem một số ví dụ về cách sử dụng hàm sub().

Sử dụng hàm sub() để trả về số điện thoại không có ký tự đặc biệt

Ví dụ sau sử dụng hàm sub() để biến số điện thoại (212)-456-7890 thành 2124567890:

import re

phone_no = '(212)-456-7890'
pattern = '\D'
result = re.sub(pattern, '', phone_no)

print(result)

Kết quả:

2124567890

Trong ví dụ này, \D là tập ký tự không phải là chữ số. Vì vậy, hàm sub() thay thế tất cả các ký tự không phải là số bằng chuỗi rỗng ''.

Sử dụng hàm sub() để thay thế các mẫu khớp không chồng lấp từ trái sang phải

Ví dụ sau thay thế 00 bằng '' trong chuỗi 00000:

import re

pattern = '00'
s = '00000'
result = re.sub(pattern, '', s)

print(result)

Kết quả:

0

Trong ví dụ này, chúng ta thay thế hai số không (00) bằng chuỗi rỗng. Do đó, hai số không đầu tiên được thay thế, tiếp theo là hai số không tiếp theo, và cuối cùng, chữ số cuối cùng vẫn không thay đổi.

Sử dụng hàm sub() với tham chiếu ngược (backreference)

Ví dụ sau sử dụng hàm sub() để thay thế văn bản được bao quanh bởi dấu (*) bằng thẻ <b> trong HTML:

import re

s = 'Make the World a *Better Place*'
pattern = r'\*(.*?)\*'
replacement = r'<b>\1</b>'
html = re.sub(pattern, replacement, s)

print(html)

Kết quả:

Make the World a <b>Better Place</b>

Trong ví dụ này, mẫu r'\*(.*?)\*' tìm văn bản bắt đầu và kết thúc bằng dấu sao (*). Nó có một nhóm bắt (capturing group) để bắt văn bản giữa hai dấu sao. Tham chiếu ngược \1 đề cập đến nhóm đầu tiên trong mẫu, tức là văn bản giữa hai dấu sao.

Sử dụng hàm sub() với giá trị thay thế là một hàm

Giả sử bạn có một danh sách các chuỗi mà mỗi phần tử chứa cả chữ cái và số:

l = ['A1', 'A2', 'A3']

Và bạn muốn bình phương số trong mỗi phần tử của danh sách. Ví dụ, A1 trở thành A1, A2 trở thành A4, và A3 trở thành A9. Để làm điều này, bạn có thể sử dụng hàm sub().

Tham số thứ hai của hàm sub() (repl) có thể là một hàm. Trong trường hợp này, hàm sub() sẽ gọi hàm này cho mỗi mẫu khớp không chồng lấp. Hàm này (repl) nhận một đối tượng Match làm tham số và trả về chuỗi thay thế.

Ví dụ sau minh họa cách sử dụng tham số thứ hai là một hàm:

import re

def square(match):
    num = int(match.group())
    return str(num*num)

l = ['A1', 'A2', 'A3']
pattern = r'\d+'
new_l = [re.sub(pattern, square, s) for s in l]

print(new_l)

Kết quả:

['A1', 'A4', 'A9']

Cách hoạt động của ví dụ này như sau:

  • Đầu tiên, định nghĩa một danh sách các chuỗi:
l = ['A1', 'A2', 'A3']

Thứ hai, định nghĩa một mẫu \d+ để khớp với một hoặc nhiều chữ số:

pattern = r'\d+'

Thứ ba, thay thế các chữ số bằng bình phương của chúng bằng cách gọi hàm sub() và truyền hàm square():

new_l = [re.sub(pattern, square, s) for s in l]

Cuối cùng, định nghĩa hàm square() để bình phương chữ số được khớp và trả về giá trị này:

def square(match):
    num = int(match.group())
    return str(num*num)

Kết bài

Qua bài viết này, mình đã tìm hiểu cách sử dụng hàm sub() trong module re của Python để thay thế các phần tử khớp với một mẫu regex trong chuỗi. Hàm sub() không chỉ giúp thực hiện các thay thế cơ bản mà còn hỗ trợ các thay thế phức tạp hơn bằng cách sử dụng nhóm bắt và các hàm thay thế. Việc nắm vững cách sử dụng hàm sub() sẽ giúp bạn xử lý và thao tác với chuỗi hiệu quả hơn trong các dự án thực tế. Hãy áp dụng những kiến thức này vào công việc hàng ngày để nâng cao khả năng xử lý dữ liệu và làm sạch văn bản của bạn.

Cùng chuyên mục:

Cách lưu trữ và tải lại Models trong PyTorch

Cách lưu trữ và tải lại Models trong PyTorch

Tìm hiểu về TensorBoard với PyTorch

Tìm hiểu về TensorBoard với PyTorch

Học chuyển giao (Transfer Learning) trong PyTorch Beginner

Học chuyển giao (Transfer Learning) trong PyTorch Beginner

Hướng dẫn cơ bản mạng Nơ-ron Tích Chập (CNN) trong PyTorch

Hướng dẫn cơ bản mạng Nơ-ron Tích Chập (CNN) trong PyTorch

Mạng Nơ-Ron truyền thẳng (Feed Forward Neural Network) trong PyTorch

Mạng Nơ-Ron truyền thẳng (Feed Forward Neural Network) trong PyTorch

Tìm hiểu Activation Functions trong PyTorch

Tìm hiểu Activation Functions trong PyTorch

Softmax và Cross Entropy trong PyTorch Beginner

Softmax và Cross Entropy trong PyTorch Beginner

Dataset Transforms trong PyTorch Beginner

Dataset Transforms trong PyTorch Beginner

Dataset và DataLoader trong PyTorch Beginner

Dataset và DataLoader trong PyTorch Beginner

Hồi quy Logistic trong PyTorch Beginner

Hồi quy Logistic trong PyTorch Beginner

Hồi quy tuyến tính trong PyTorch Beginner

Hồi quy tuyến tính trong PyTorch Beginner

Training Pipeline trong PyTorch Beginner

Training Pipeline trong PyTorch Beginner

Sử dụng Gradient Descent với Autograd trong PyTorch

Sử dụng Gradient Descent với Autograd trong PyTorch

Hướng dẫn về Tensor cơ bản trong PyTorch

Hướng dẫn về Tensor cơ bản trong PyTorch

Hướng dẫn cài đặt PyTorch với Deep Learning

Hướng dẫn cài đặt PyTorch với Deep Learning

LDA (Linear Discriminant Analysis) trong Python

LDA (Linear Discriminant Analysis) trong Python

Thuật toán AdaBoost trong Python

Thuật toán AdaBoost trong Python

Thuật toán K-Means Clustering trong Python

Thuật toán K-Means Clustering trong Python

Triển khai PCA bằng Python

Triển khai PCA bằng Python

Triển khai thuật toán Random Forest bằng Python

Triển khai thuật toán Random Forest bằng Python

Top