Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

REGULAR EXPRESSION

Regular Expression – biểu thức chính quy được biết đến trong giới lập trình với tên gọi
ngắn gọn hơn là Regex. Biểu thức chính quy là một đoạn các ký tự đặc biệt theo những
khuôn mẫu (pattern) nhất định, đại diện cho chuỗi hoặc một tập các chuỗi.
Nguyên tắc hoạt động của Regular Expression chính là so khớp dựa vào khuôn mẫu.
Trong đó, các khuôn mẫu này được xây dựng từ những quy tắc căn bản biểu thức của
Regex.
CÁC CÚ PHÁP XÂY DỰNG PATTERN
Dấu ngoặc vuông
Dấu ngoặc vuông sử dụng để thể hiện tập các ký tự bạn muốn khớp.
Ví dụ: với pattern “[abc]”
- Khớp với các chuỗi “a”, “ac”, “accept”
- Không khớp với chuỗi “MU”, “Loserpool”
Ở đây, [abc] sẽ khớp nếu chuỗi truyền có chứa bất kỳ ký tự a, b hoặc c nào.
Cũng có thể chỉ định một phạm vi các ký tự bằng cách sử dụng dấu “-” bên trong dấu
ngoặc vuông.
- “[a-e]” tương tự với “[abcde]”.
- [1-4] tương tự với “[1234]”.
- “[0-39]” tương tự với “[01239]”.
Nếu ký tự đầu tiên của tập hợp là ^ thì tất cả các ký tự không được định nghĩa trong tập
hợp sẽ được so khớp.
- “[^abc]” nghĩa là khớp với các chuỗi không có ký tự a, b hay c.
- “[^0-9]” nghĩa là khớp với các chuỗi không có ký tự chữ số nào.
Các ký tự đặc biệt trong [ ] sẽ được coi như ký tự thông thường.
- “[(+)]” khớp với bất kỳ chuỗi nào có ký tự “(”, “+” hoặc “)”.
Dấu chấm
Dấu chấm khớp với bất kỳ ký tự đơn thông thường nào ngoại trừ ký tự tạo dòng mới '\n'.
Ví dụ: với pattern “..”
- Khớp với các chuỗi “ac”, “internet”
- Không khớp với chuỗi “a” vì chỉ có 1 kí tự
Dấu mũ
Biểu tượng dấu mũ “^” được sử dụng để khớp ký tự được chỉ định phía sau nó đứng đầu
một chuỗi.
Ví dụ: với pattern “^ab”:
- Khớp với chuỗi “ab”,“abcghauww”
- Không khớp với chuỗi “zxcvbnm”,“bakkdiags” vì “ab” không ở đầu tiên.
Biểu tượng đô la “$”
Biểu tượng đô la “$” được sử dụng để khớp ký tự đứng cuối một chuỗi được chỉ định
phía trước nó.
Ví dụ: với pattern “ab$”:
- Khớp với chuỗi “ab”,“bab”, “ghinhanab”
- Không khớp với chuỗi “zxcvbnm”,“abkkdiagsba” vì “ab” không ở cuối cùng
Dấu hoa thị
Biểu tượng dấu hoa thị “*” có thể khớp với chuỗi có hoặc không có ký tự được định
nghĩa ngay trước nó. Ký tự này có thể được lặp lại nhiều lần mà không bị giới hạn số
lượng.
Ví dụ: với pattern “u*7”
- Khớp với chuỗi “u7”, “uuuuu7”, “7”, “777788u”
- Không khớp với chuỗi “messiu7”, “si8u7”, “siu87”
Dấu cộng
Biểu tượng dấu cộng “+” có thể khớp với chuỗi có một hoặc nhiều ký tự được định nghĩa
ngay trước nó. Ký tự này có thể được lặp lại nhiều lần mà không bị giới hạn số lượng.
Ví dụ: với pattern “siu+7”
- Khớp với chuỗi “siu7”, “siuuuuu7”, “siuuuuu7875675”
- Không khớp với chuỗi “messiu7”, ” “si7”, “si8u7”, “siu87”
Dấu chấm hỏi
Biểu tượng dấu chấm hỏi “?” có thể khớp với chuỗi có hoặc không có ký tự được định
nghĩa ngay trước nó. Ký tự này chỉ có thể được xuất hiện nhiều nhất 1 lần.
Ví dụ: với pattern “siu?7”
- Khớp với chuỗi “siu7”, “si7”, “siu7875675”, “si77”
- Không khớp với chuỗi “messiu7”, ” “siuuuuu7”, “si8u7”, “siu87”
Dấu ngoặc nhọn “{ }”
Dấu ngoặc nhọn sử dụng theo công thức tổng quát: “{n,m}”, đại diện cho việc ký tự đằng
trước nó có thể xuất hiện tối thiểu n lần vào tối đa m lần. n và m là số nguyên dương và n
<= m.
 Nếu bỏ trống n, giá trị này mặc định bằng 0.
 Nếu bỏ trống m, giá trị này mặc định là vô hạn.
Ví dụ: với pattern “ba{2,3}”
- Khớp với chuỗi “babaabbh”, “baaabacd”
- Không khớp với chuỗi “abch”, “bcaabach”, “babCaach”…
Có thể sử dụng với các cụm chuỗi ghép như “[ab]”, “[a-z]”, “\d” thay cho chữ đứng trước
dấu ngoặc nhọn để match với nhiều kí tự
Dấu sổ dọc
Biểu tượng dấu sổ dọc “|” này có thể khớp với chuỗi tồn tại 1 trong 2 ký tự được định
nghĩa trước và sau nó. Tương tự như phép or
Ví dụ: với pattern “ab|cd”
- Khớp với “abhhgga”, “cdcdcddcammmaab”…
- Không khớp với “ba”, “dc”, “zbadc”…
Dấu ngoặc đơn
Dấu ngoặc đơn “()” được sử dụng để gom nhóm các pattern lại với nhau, chuỗi sẽ khớp
với biểu thức chính quy bên trong dấu ngoặc này.
Ví dụ: với pattern “(a|b|c)xz” khớp với bất kỳ chuỗi nào có a hoặc b hoặc c đứng trước
xz.
Dấu gạch sổ “ \”
Dấu gạch sổ được sử dụng để thoát các ký tự đặc biệt, nghĩa là khi đứng trước một kí tự
đặc biệt, “\” sẽ biến kí tự này thành một kí tự thường, bạn có thể tìm kiếm kí tự đặc biệt
này trong chuỗi như các kí tự thường khác.
Ví dụ: “\$a” sẽ khớp với chuỗi chứa ký tự “$” đứng trước “a”. Ở đây, biểu tượng Dollar
“$” không sử dụng để khớp một chuỗi kết thúc bằng ký tự đi cùng nó như trong công cụ
RegEx, “$” chỉ là ký tự bình thường.
Tuy nhiên, một dấu gạch sổ cũng sẽ biến một kí tự thường liền kế phía sau thành một kí
tự đặc biệt.
Ví dụ, trường hợp ký tự “b” không có dấu gạch sổsẽ khớp với các ký tự “b” in thường,
nhưng khi nó có thêm dấu gạch chéo ngược, “\b” thì nó trở thành kí tự đặc biệt, không
khớp với bất kì ký tự nào nữa.
Tiền tố r
Khi tiền tố r hoặc R được sử dụng trước một biểu thức chính quy đại diện cho việc chuỗi
tiếp sau nó chỉ là những ký tự bình thường.
Ví dụ: '\n' là một dòng mới newline, còn r'\n' có nghĩa là chuỗi bao gồm hai ký tự: dấu
gạch chéo ngược \ và n.
Dấu gạch chéo ngược \ được sử dụng để thoát các ký tự như đã nói ở trên. Tuy nhiên, sử
dụng tiền tố r trước \ thì nó chỉ là một ký tự bình thường.
Một số pattern đi với “\”
1. “\A”: Khớp với các ký tự theo sau nó nằm ở đầu chuỗi.
Ví dụ: với pattern “\Ath”
- Khớp với “the man”
- Không khớp với “xthe man”
2. r“\b”: Khớp với các ký tự được chỉ định nằm ở đầu hoặc cuối của từ tùy vào vị trí
của r“\b” trước hay sau kí tự cần match.
Ví dụ: với pattern r“\ban”
- Khớp với “another one”, “cong an”,
3. r“\B”: ngược lại với r“\b”, khớp với các ký tự được chỉ định không nằm ở đầu
hoặc cuối của từ.
Ví dụ: với patten r“\Ban” sẽ khớp với chuỗi “on theManhuman ness”
4. r“\d”: Khớp với các ký tự là chữ số trong chuỗi, tương đương với “[0-9]”.
Ví dụ: với pattern r“\d”:
- Khớp với chuỗi “h9h172” , “hoang123”
- Không khớp với chuỗi “homnaynangto”
5. r“\D”: Khớp với các ký tự không phải là chữ số trong chuỗi, tương đương với
“[^0-9]”.
Ví dụ: với pattern r“\D”:
- Khớp với chuỗi “h9h172” , “hoang123”
- Không khớp với chuỗi “127635__287”
6. r“\s”: Khớp với bất kỳ ký tự khoảng trắng nào trong chuỗi.
Ví dụ: với pattern r“\s”:
- Khớp với chuỗi “h9h172 7982” , “ hoang123 i12 128”
- Không khớp với chuỗi “127635__287”
7. r“\S”: Khớp với bất kỳ ký tự nào không phải khoảng trắng.
Ví dụ: với pattern r“\S”:
- Khớp với chuỗi “h9h172 7982” , “ hoang123 i12 128”
- Không khớp với chuỗi “ ” (chuỗi chỉ toàn khoảng trắng)
8. r“\w”: Khớp với bất kỳ ký tự chữ cái và chữ số nào, tương đương với “[a-zA-Z0-
9_]” (dấu “_” cũng được coi là chữ số)
Ví dụ: với pattern r“\w”:
- Khớp với chuỗi “!&^@%&*^%y&^” , “ __________”
- Không khớp với chuỗi “(*&^@(*&^*&(%@^^”
9. r“\W”: Khớp với bất kỳ ký tự nào không phải là chữ cái và chữ số (như các kí tự
đặc biệt), tương đương với “[^a-zA-Z0-9_]”
Ví dụ: với pattern r“\W”:
- Khớp với chuỗi “h9h*172 7982” , “ hoang123 ^^^^ i12 128”
- Không khớp với chuỗi “127635__287”
CÁC PHƯƠNG THỨC VỚI 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.
re.findall()
Phương thức re.findall() trả về một danh sách các chuỗi chứa tất cả các kết quả khớp với
pattern đưa ra.
Cú pháp: findall(partern, string)
Trong đó:
- pattern là RegEx.
- string là chuỗi cần so khớp.
re.split()
Phương thức re.split() dùng biểu thức chính quy để ngắt chuỗi thành các chuỗi con và trả
về danh sách các chuỗi con này.
Cú pháp: re.split(pattern, string, maxsplit)
Trong đó:
- pattern là RegEx.
- string là chuỗi cần so khớp.
- maxsplit (số nguyên) là số chuỗi tối đa sẽ được ngắt. Nếu để trống thì sẽ so khớp
và cắt tất cả các chuỗi đạt điều kiện.
Nếu không tìm thấy pattern trong string, re.split() trả về danh sách chứa chuỗi rỗng.
re.sub()
phương thức re.sub() sẽ thay thế tất cả các kết quả khớp với pattern trong chuỗi bằng một
nội dung khác được truyền vào và trả về chuỗi đã được sửa đổi.
Cú pháp: re.sub(pattern, replace, string, count)
Trong đó:
- pattern là RegEx.
- replace là nội dung thay thế cho chuỗi kết quả khớp với pattern.
- string là chuỗi cần so khớp.
- count (số nguyên) là số lần thay thế. Nếu để trống thì Python sẽ coi giá trị này
bằng 0, so khớp và thay thế tất cả các chuỗi đạt điều kiện.
re.subn()
Phương thức re.subn() sử dụng tương tự như re.sub() ở trên, nhưng kết quả trả về bao
gồm một tuple chứa hai giá trị: chuỗi mới sau khi được thay thế và số lần thay thế đã thực
hiện.
re.search()
Phương thức re.search() sử dụng để tìm kiếm chuỗi phù hợp với pattern RegEx. Nếu tìm
kiếm thành công, re.search() trả về đối tượng khớp, nếu không, nó trả về None.
Cú pháp: re.search(pattern, string)
Trong đó:
- pattern là RegEx.
- string là chuỗi cần so khớp.
re.escape()
Phương thức này sử dụng để lấy các từ và các kí tự đặc biệt ở gần với các từ đó.
Cú pháp: re.escape(string)
Trong đó, string là chuỗi đi cùng với các kí tự đặc biệt cần lấy ra.
ĐỐI TƯỢNG MATCH
Một số phương thức và thuộc tính thường được sử dụng với đối tượng match.
match.group()
Phương thức group() trả về những phần của chuỗi khớp với pattern.
match.start(), match.end() và match.span()
Hàm start() trả về chỉ mục bắt đầu của chuỗi con phù hợp. Tương tự, end() trả về chỉ mục
kết thúc của chuỗi con phù hợp.
Hàm span() trả về tuple chứa chỉ mục bắt đầu và kết thúc của phần chuỗi phù hợp.
match.re và match.string
Thuộc tính re của đối tượng match sẽ trả về một biểu thức chính quy. Tương tự, thuộc
tính string trả về chuỗi đã được truyền trong đoạn code.
Link ví dụ:
https://colab.research.google.com/drive/1BgFyroUTOMq6PEKQfvp1jw8A5GG9NWsC#
scrollTo=fY2MaaE13NQJ

You might also like