Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 9: Regular Expression trong Python (P2)

phần trước mình đã giới thiệu đến mọi người một số các phương thức hay được sử dụng trong Regular Expression rồi, phần này mình sẽ giới thiệu với mọi người các cú pháp pattern trong Python.

1, Các cú pháp pattern trong Python.

Dưới đây mình sẽ liệt kê ra một số các cú pháp pattern trong Python mà chúng ta hay sử dụng và kèm với theo nó là các ví dụ.

[]

Trong cặp dấu này chứa các ký tự có thể so khớp với văn bẳn. Nó gần giống như toán tử hoặc, nghĩa là chỉ cần nó so khớp 1 trong các ký tự được liệt kê trong cặp dấu này thì chuỗi đó được so khớp.

VD: pattern chuỗi bắt đầu bằng T hoặc t.

import re

str = 'thanhtaivtt'
match = re.match(r'[Tt]', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!')
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

Và bạn cũng có thể liệt kê ra các ký tự dưới dạng từ ... đến ... bằng cách thể hiện dấu - giữa hai khoảng đó.

VD: Pattern chuỗi bắt đầu bằng ký tự in thường hoặc bằng số.

import re

str = 'thanhtaivtt'
match = re.match(r'[a-z0-9]', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!')
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

.

Ký tự dấu . này tương đương với việc so khớp một chuỗi phải chứa ít nhất một ký tự.

VD:

import re

str = 'thanhtaivtt'
match = re.match(r'.', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!')
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

^

Ký tự này đại diện cho việc so khớp từ đầu của chuỗi.

VD: so khớp xem có phải đầu chuỗi là chữ h

import re

str = 'thanhtaivtt'
match = re.search(r'^h', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!')
else:
    print ('Khong tim thay!')
# Kết quả:
# Khong tim thay!

$

Ký tự này đại diện cho việc so khớp đến cuối chuỗi.

VD: so khớp xem cuỗi chuỗi có phải chữ t

import re

str = 'thanhtaivtt'
match = re.search(r't$', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

*

Ký tự này đại diện cho có thể có hoặc không có ký tự trước nó.

VD: So khớp một chuỗi xem có thể bắt đầu bằng t hoặc không bắt đầu bằng t hoặc là chuỗi rỗng.

import re

str = ''
match = re.match(r't*', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

+

Ký tự này đại diện cho có thể xuất hiện ít nhất hoặc nhiều ký tự trước nó.

VD: So khớp xem một chuỗi chỉ chứa chữ cái in thường.

import re

str = 'vuthanhtai'
match = re.match(r'[a-z]+', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

?

Ký tự này đại diện cho chuỗi sẽ khớp với một trong các ký tự đằng trước nó.

VD: Kiểm tra xem một chuỗi có được bắt đầu bằng a hoặc b hay không.

import re

str = 'vuthanhtai'
match = re.match(r'ab?', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khong tim thay!

{m, n}

Ký tự này đại diện cho việc so khớp xem chuỗi đằng trước nó xuất hiện bao nhiêu tối thiểu m lần và tối đa n lần. Nếu bỏ trống n thì là so khớp sự xuất hiện m lần của chuỗi đằng trước nó.

VD: Kiểm tra xem 3 chữ cái đầu của chuỗi có phải là v không.

import re

str = 'vuthanhtai'
match = re.match(r'v{3}', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khong tim thay!

|

Ký tự này đại diện cho sự tồn tại của một trong 2 ký tự trước và sau nó.

VD: kiểm tra xem đầu chuỗi cõ phải là a hoặc b hay không.

import re

str = 'vuthanhtai'
match = re.match(r'a|b', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong khop!')
# Kết quả:
# Khong Khop!

()

Ký tự này dùng để gom nhóm các pattern lại với nhau.

VD: Kiểm tra xem chuỗi chó chứa chũ 'thanh' không.

import re

str = 'vuthanhtai'
match = re.match(r'(.*)(thanh)(.*)', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong khop!')
# Kết quả:
# Khop!

\

Ký tự này giúp phân biệt chuỗi sau nó không phải là ký tự đặc biệt.

VD: Kiểm tra xem đầu chuỗi có phải là dấu . không.

import re

str = '.vuthanhtai'
match = re.match(r'\.', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong khop!')
# Kết quả:
# Khop!

Các pattern khác

Pattern Mô Tả
\A So khớp chuỗi là chuỗi.
\B So khớp nếu vị trí đặt \B không phải là đầu hoặc cuối chuỗi.
\d So khớp với số nguyên.
\D So khớp với các ký tự không phải là số.
\s So khớp với khoảng trắng và các ký tự chữ.
\S So khớp với các kỹ tự không phải là chữ.
\w So khớp với chữ hoặc số.
\W So khớp với các ký tự không phải là chữ hoặc số.

2, Các flags trong Python.

Như ở phần 1 mình có trình bày các thông số flag trong Regular Expression, nhưng mình chưa liệt kê ra các flag đó. Và dưới đây là một số các flags hay dùng trong Python.

  • I hoặc IGNORECASE - Không phân biệt hoa thường khi so khớp.
  • L hoặc LOCALE - So Khớp với local hiện tại.
  • M hoặc MULTILINE - Thay đổi $^ thành kết thúc của một dòng và bắt đầu của một dòng thay vì mặc định là kết thúc chuỗi và bắt đầu chuỗi.
  • A hoặc ACSII - Thay đổi \w\W\b\B\d\D, \S\s thành so khơp full unicode.
  • S hoặc DOTALL -Thay đổi pattern . thành khớp với bất kỳ ký tự nào và dòng mới.
  • .....

VD: So khớp một chuỗi bắt đầu bằng v hoặc V.

import re

str = 'vuthanhtai'
match = re.match(r'V', str, re.IGNORECASE) # hoặc re.I
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong khop!')
# Kết quả:
# Khop!

3, Lời kết.

Như vậy phần này mình đã giới thiệu xong đến mọi người cơ bản về regular Expression trong Python rồi. Còn nếu bạn nào muốn tìm hiểu thêm tại đây.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

10 Comments

Một bài viết rất chi tiết và dễ hiểu mà sao ít người bình luận thế nhỉ.

Rất cảm ơn tác giả

Erik

5 năm trước

Chắc các bạn ý đọc xong là xong thôi bạn ạ! :D

Vũ Thanh Tài

5 năm trước

Các bác cho em hỏi tí ạ:

Em có string: "<red>AB CD<@red><yellow>EFGH<@yellow>"

Nếu em dùng : data = re.findall(r'w*', string) thì có kết quả sau :

['', 'red', '', 'AB', '', 'CD', '', '', 'red', '', '', 'yellow', '', 'EFGH', '', '', 'yellow', '', '']

Nhưng nếu em dùng : data = re.findall(r'<w+>\w*<\w+>', string ) thì nó lại ra :

['<yellow>EFGH<@yellow>']

Vì sao dấu cách ở AB CD không nhận diện được ạ.

Em cảm ơn ạ

Chu Quang Huy

5 năm trước

W bao gồm regex như sau nhé bạn [a-zA-Z0-9_], vì thế nên nó không nhận khoảng trắng đâu bạn ạ

Vũ Thanh Tài

5 năm trước

1. Mấy cái vd đầu kết quá 't' ấy với đoạn code ấy phải là 'khớp' chứ
2. mình đang lang thang tìm hiểu sử khác nhau match,allmatch vs search bạn có thể giải thích cho mình k?

trương trí

5 năm trước

Bài viết hay quá cảm ơn ạ

Thiện

5 năm trước

Bài viết hay quá , cảm ơn ạ 

Duy

5 năm trước

cam on tac gia!

Linh

4 năm trước

Sorry bác, em cũng đọc xong định thôi nhưng thấy bảo không ai bình luận nên em vào. cảm ơn bác về các bài viết nhiều.

sadsadsa

3 năm trước

Chào sadsadsa,

Cảm ơn bạn nhé!

Vũ Thanh Tài

3 năm trước

Bình luận

Captcha