DANH MỤC: PYTHON NÂNG CAO

Bài 8: Regular Expression trong Python


Trong các dự án, việc ràng buộc thông tin người dùng nhập lên là điều rất cần thiết và quan trọng. Và hôm nay chúng ta sẽ cùng tìm hiểu về Regular Expression trong Python xem nó được sử dụng như thế nào nhé!

1, Regular Expression là gì?

Regular expression (dịch ra tiếng việt là biểu thức chính quy) là một đoạn các ký tự đặc biệt dùng để so khớp các chuỗi hoặc một tập các chuỗi. Bạn cũng có thể gọi Regular Expression là một ngôn ngữ. Và hầu như ngôn ngữ lập trình nào cũng hỗ trợ Regular expression, nhưng được sử dụng nhiều nhất và phổ biến nhất là trong UNIX.

2, Regular Expression trong Python.

Regular Expression trong Python được thể hiện qua module re, nên việc đầu tiên khi các bạn muốn sử dụng regular expression thì cần phải import module re vào chương trình, sử dụng với cú pháp như sau:

import re

Trong module này thì có rất nhiều các phương thức, và mình sẽ liệt kê một số phương thức hay được sử dụng kèm theo ví dụ với mỗi phương thức đó.

group(num)

Phương thức này trả về các giá trị so khớp giữa biểu thức chính quy và chuỗi cần so. Trong đó thì num này là vị trí index của list so khớp trả về mà bạn muốn lấy ra. Nếu không điền thì Python sẽ coi nó là 0.

VD:

import re

str = 'Học lập trình Toidicode.com'
match = re.search(r'Toidicode.com', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match.group()) # in ra chuỗi đó
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
#Kết quả:
#Toidicode.com

groups()

Phương thức này sẽ trả về một tupel các chuỗi được so khớp khớp.

VD:

import re

str = 'Hoc lap trinh Toidicode.com'
match = re.search(r'(.*) Toidicode.com', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match.groups()) # in ra chuỗi đó
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
#Kết quả:
#('Hoc lap trinh',)

search(pattern, string, flags)

Phương thức này thực hiện tìm kiếm chuỗi so khớp trên string và nó sẽ trả về các giá trị được so khớp.

Trong đó:

  • pattern là chuỗi regular expression.
  • string là chuỗi cần so khớp.
  • flags là các kiểu so khớp mà bạn muốn thực hiện (xem ở dưới). Nếu để trống thì flags sẽ bằng 0.

VD:

import re

str = 'Hoc lap trinh Toidicode.com'
match = re.search(r'Toidicode.com', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match.group()) # in ra chuỗi đó
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
#Kết quả:
#Toidicode.com

match(pattern, string, flags)

Phương thức này cũng thực hiện việc so khớp chuỗi nhưng nó sẽ tính từ phạm vi đầu chuỗi cho đến kết thúc, còn các tham số truyền vào thì tương tự như đối với phương thức search().

VD:

import re

str = 'Hoc lap trinh Toidicode.com'
match = re.match(r'Toidicode.com', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match.group()) # in ra chuỗi đó
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
# Kết quả:
# Khong tim thay!

fullmatch(pattern, string, flags)

Phương thức này cũng thực hiện việc so khớp nhưng nó là so khớp hoàn toàn, còn các tham số truyền vào là tương tự như phương thức match.

VD: Đây là ví dụ phân biệt sự khác nhau giữa match và fullmatch.

+ fullmatch

import re

str = 'Hoc lap trinh Toidicode.com'
match = re.fullmatch(r'Hoc lap trinh', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match.group()) # in ra chuỗi đó
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
# Kết quả:
# Khong tim thay!

+ match

import re

str = 'Hoc lap trinh Toidicode.com'
match = re.match(r'Hoc lap trinh', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match.group()) # in ra chuỗi đó
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
# Kết quả:
# Hoc lap trinh

split(pattern, string, maxsplit)

Hàm này có tác dụng so khớp và cắt chuỗi so khớp thành công.

Trong đó:

  • pattern là chuỗi regular expression.
  • string là chuỗi cần so khớp.
  • maxsplit là số chuỗi tối đa sẽ được split. Nếu để trống thì Python sẽ tìm và cắt tất cả các chuỗi

VD

import re

str = 'Hoc lap trinh Toidicode.com'
match = re.split(r'i', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match) # in ra kết quả
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
# Kết quả:
# ['Hoc lap tr', 'nh To', 'd', 'code.com']

findall(partern, string, flags)

Phương thức này có tác dụng so khớp và trả về tất cả các chuỗi mà nó đã so khơp được, còn lại các tham số truyền và sử dụng như đối với phương thức search.

VD:

import re

str = 'Hoc lap trinh Toidicode.com'
match = re.findall(r'i', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match) # in ra kết quả
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
# Kết quả:
# ['i', 'i', 'i']

sub(pattern, replace, string, flags)

Phương thức này có tác dụng so khớp và thay thế chuỗi so khớp được.

Trong đó:

  • pattern là chuỗi regular expression.
  • replace là chuỗi thay thế cho các chuỗi được so khớp.
  • string là chuỗi cần so khớp.
  • flags là các kiểu so khớp mà bạn muốn thực hiện (xem ở dưới). Nếu để trống thì flags sẽ bằng 0.

VD

import re

str = 'Hoc lap trinh Toidicode.com'
match = re.sub(r'Toidicode.com','https://toidicode.com', str)
if match: #nếu tồn tại chuỗi khớp                     
    print (match) # in ra kết quả
else:
    print ('Khong tim thay!') # Không thì hiện thông báo
# Kết quả:
# Hoc lap trinh https://toidicode.com

.....

3, Lời kết.

Phần này khá dài nên mình sẽ chia làm 2 phần. Mời các bạn đọc tiếp phần 2 tại đây.

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

Biển học vô biên, quay đầu là dại!

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia