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 tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit

Cách tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit

Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit

Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit

Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit

Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit

Cách sử dụng widget PyQt QSpinBox để tạo một spin box

Cách sử dụng widget PyQt QSpinBox để tạo một spin box

Sử dụng PyQt QComboBox để tạo Widget Combobox

Sử dụng PyQt QComboBox để tạo Widget Combobox

Cách sử dụng lớp PyQt QRadioButton

Cách sử dụng lớp PyQt QRadioButton

Cách sử dụng lớp QCheckBox trong PyQt

Cách sử dụng lớp QCheckBox trong PyQt

Cách sử dụng QFormLayout trong PyQt

Cách sử dụng QFormLayout trong PyQt

Cách sử dụng QGridLayout trong PyQt

Cách sử dụng QGridLayout trong PyQt

Cách sử dụng QVBoxLayout trong PyQt

Cách sử dụng QVBoxLayout trong PyQt

Cách sử dụng widget QLineEdit trong PyQt

Cách sử dụng widget QLineEdit trong PyQt

Cách sử dụng widget QPushButton của PyQt

Cách sử dụng widget QPushButton của PyQt

Cách sử dụng widget PyQt QLabel

Cách sử dụng widget PyQt QLabel

Tín hiệu và Khe (Signals & Slots) trong PyQt

Tín hiệu và Khe (Signals & Slots) trong PyQt

PyQt là gì? Tạo một chương trình

PyQt là gì? Tạo một chương trình "Hello World".

Ứng dụng System Tray với Tkinter

Ứng dụng System Tray với Tkinter

Cách hiển thị đồ thị từ thư viện Matplotlib trong Tkinter

Cách hiển thị đồ thị từ thư viện Matplotlib trong Tkinter

Cách sử dụng Validate trong Tkinter

Cách sử dụng Validate trong Tkinter

Cấu trúc MVC trong Tkinter

Cấu trúc MVC trong Tkinter

Cách sử dụng widget PhotoImage của Tkinter

Cách sử dụng widget PhotoImage của Tkinter

Top