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:
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.