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 Flags của Regex trong Python

Trong lập trình Python, biểu thức chính quy (regular expression) là một công cụ mạnh mẽ để xử lý và tìm kiếm chuỗi. Để tận dụng hết khả năng của biểu thức chính quy, việc hiểu và sử dụng các cờ (flags) là rất quan trọng. Các flags này không chỉ giúp thay đổi cách bộ máy regex hoạt động mà còn mang lại sự linh hoạt trong việc kiểm soát quá trình khớp mẫu. Trong bài viết này, mình sẽ cùng tìm hiểu về các flags trong biểu thức chính quy Python và cách chúng có thể giúp bạn xử lý chuỗi một cách 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ề các flags trong biểu thức chính quy Python

Các hàm biểu thức chính quy như findall, finditer, search, match, split, sub,... có tham số flags cho phép nhận một hoặc nhiều flags biểu thức chính quy.

Kể từ Python 3.6, các flags biểu thức chính quy là các instance của lớp liệt kê RegexFlag trong module re. Bảng sau đây liệt kê các flags có sẵn và ý nghĩa của chúng:

flags Alias Inline Flag Ý nghĩa
re.ASCII re.A ?a re.ASCII chỉ liên quan đến các mẫu byte. Nó khiến các ký tự như \w, \W, \b, \B, \d, \D, và \S chỉ khớp với các ký tự ASCII thay vì khớp toàn bộ Unicode.
re.DEBUG N/A N/A re.DEBUG hiển thị thông tin gỡ lỗi của mẫu đã biên dịch.
re.IGNORECASE re.I ?i Thực hiện khớp không phân biệt chữ hoa và chữ thường. Nó có nghĩa là [A-Z] cũng sẽ khớp với các chữ cái thường.
re.LOCALE re.L ?L re.LOCALE chỉ liên quan đến mẫu byte. Nó làm cho các ký tự như \w, \W, \b, \B và việc khớp không phân biệt chữ hoa chữ thường phụ thuộc vào địa phương hiện tại. Flagsre.LOCALE không tương thích với flags re.ASCII.
re.MULTILINE re.M ?m re.MULTILINE làm cho ^ khớp ở đầu chuỗi và ở đầu mỗi dòng, và $ khớp ở cuối chuỗi và ở cuối mỗi dòng.
re.DOTALL re.S ?s Theo mặc định, dấu chấm (.) khớp với bất kỳ ký tự nào ngoại trừ ký tự xuống dòng. re.DOTALL làm cho dấu chấm (.) khớp với tất cả các ký tự bao gồm cả ký tự xuống dòng.
re.VERBOSE re.X ?x re.VERBOSE cho phép bạn tổ chức mẫu thành các phần hợp lý một cách trực quan và thêm các bình luận.

Để kết hợp hai hoặc nhiều flags, bạn sử dụng toán tử | như sau:

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

re.A | re.M | re.S

Các ví dụ về flags biểu thức chính quy trong Python

Ví dụ về flags re.IGNORECASE

Ví dụ sau sử dụng hàm findall() để tìm tất cả các ký tự thường trong tập [a-z] trong một chuỗi:

import re

s = 'Python is awesome'
pattern = '[a-z]+'

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

Kết quả:

['ython', 'is', 'awesome']

Chữ P không được bao gồm trong kết quả vì nó không nằm trong tập [a-z].

Ví dụ sau sử dụng flags re.IGNORECASE:

import re

s = 'Python is awesome'
pattern = '[a-z]+'

l = re.findall(pattern, s, re.IGNORECASE)
print(l)

Kết quả:

['Python', 'is', 'awesome']

Mặc dù mẫu chỉ khớp với các ký tự trong tập [a-z], flags re.IGNORECASE hướng dẫn bộ máy regex cũng khớp với các ký tự trong tập [A-Z].

Ví dụ về flags re.MULTILINE

Ví dụ sau sử dụng ký tự mỏ neo ^ để khớp với một hoặc nhiều ký tự từ đầu của chuỗi:

import re

s = '''Regex 
Flags'''

pattern = '^\w+'

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

Kết quả:

['Regex']

Chuỗi s có hai dòng. Ký tự ^ chỉ khớp ở đầu chuỗi như mong đợi.

Nếu bạn sử dụng flags re.MULTILINE, ký tự ^ sẽ khớp ở đầu mỗi dòng. Ví dụ:

import re

s = '''Regex 
Flags'''

pattern = '^\w+'

l = re.findall(pattern, s, re.MULTILINE)
print(l)

Kết quả:

['Regex', 'Flags']

Ví dụ về flags re.DOTALL

Trong ví dụ này, mẫu .+ khớp với một hoặc nhiều ký tự ngoại trừ ký tự xuống dòng:

import re

s = '''Regex
Flags'''

pattern = '.+'

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

Kết quả:

['Regex', 'Flags']

Nếu bạn sử dụng flags re.DOTALL, mẫu .+ cũng sẽ khớp với ký tự xuống dòng:

import re

s = '''Regex
Flags'''

pattern = '.+'

l = re.findall(pattern, s, re.DOTALL)
print(l)

Kết quả:

['Regex\nFlags']

Ví dụ về flags re.VERBOSE

Ví dụ sau cho thấy cách sử dụng flags re.VERBOSE để viết mẫu thành các phần với các bình luận:

import re

s = 'Python 3'

pattern = r'''^(\w+) # khớp với một hoặc nhiều ký tự ở đầu chuỗi
               \s*   # khớp với không hoặc nhiều khoảng trắng
              (\d+)$ # khớp với một hoặc nhiều chữ số ở cuối chuỗi'''

l = re.findall(pattern, s, re.VERBOSE)
print(l)

Kết quả:

[('Python', '3')]

Trong ví dụ này, flags re.VERBOSE cho phép chúng ta thêm các khoảng trắng và bình luận vào biểu thức chính quy để giải thích từng quy tắc riêng lẻ.

Ví dụ về flags re.ASCII

Ví dụ sau khớp với các từ có hai ký tự:

import re

s = '作法 is Pythonic in Japanese'
pattern = r'\b\w{2}\b'

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

Kết quả:

['作法', 'is', 'in']

Tuy nhiên, nếu bạn sử dụng flags re.ASCII, các kết quả khớp chỉ bao gồm các ký tự ASCII:

import re

s = '作法 is Pythonic in Japanese'
pattern = r'\b\w{2}\b'

l = re.findall(pattern, s, re.ASCII)
print(l)

Kết quả:

['is', 'in']

Trong ví dụ này, từ 作法 đã bị loại khỏi danh sách kết quả.

Kết bài

Thông qua việc nắm vững các flags trong biểu thức chính quy Python, bạn có thể tùy chỉnh cách bộ máy regex hoạt động để phù hợp với nhu cầu của mình. Các flagsnày cung cấp sự linh hoạt và sức mạnh trong việc xử lý và tìm kiếm chuỗi, giúp bạn giải quyết các bài toán một cách hiệu quả hơn. Hãy áp dụng những kiến thức này vào các tình huống thực tế để thấy rõ hơn lợi ích của biểu thức chính quy trong việc quản lý và phân tích dữ liệu.

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