Bài 8: Regular Expression trong Python (P1)

Bài 8: Regular Expression trong Python (P1)

1. Regular Expression là gì?

Trong Python, Regular Expression (regex) được sử dụng để tìm kiếm, phân tích và thay thế các mẫu chuỗi. Regex là một cú pháp đặc biệt cho phép bạn tạo ra các mẫu tìm kiếm phù hợp với các chuỗi trong văn bản một cách linh hoạt và hiệu quả. 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. Cách sử dụng 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 azbook.org'
match = re.search(r'azbook.org', 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ả:
#azbook.org

 

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 = 'Học lập trình azbook.org'
match = re.search(r'(.*) azbook.org', 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ả:
#Học lập trình azbook.org

 

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 = 'Học lập trình azbook.org'
match = re.search(r'azbook.org', 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ả:
#azbook.org

 

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 = 'Học lập trình azbook.org'
match = re.match(r'azbook.org', 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 = 'Học lập trình azbook.org'
match = re.fullmatch(r'Học lập trình', 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 = 'Học lập trình azbook.org'
match = re.match(r'Học lập trình', 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ả:
#Học lập trình

 

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 lập trình azbook.org'

match = re.split(r'o', 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ả:
# ['H', 'c lập trình azb', '', 'k.', 'rg']

 

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 azbook.org'
match = re.findall(r'o', 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ả:
# ['o', 'o', 'o', 'o']

 

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 azbook.org'
match = re.sub(r'azbook.org''https://azbook.org', 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://azbook.org

 

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.