Ở bài này ta sẽ tìm hiểu về RegEx trong python. Một công cụ khá khó sử dụng những nó sẽ giúp ta giảm được rất nhiều logic vận dụng tốt.
RegEx là gì
RegEx hay Regular Expression là một chuỗi ký tự tạo thành mẫu tìm kiếm.
RegEx có thể được sử dụng để kiểm tra xem một chuỗi có chứa mẫu tìm kiếm đã chỉ định hay không.
Module RegEx
Python có một gói tích hợp có tên là re, có thể được sử dụng để làm việc với Regular Expression
Nhập module re:
import re
RegEx trong Python
Khi bạn đã nhập remô-đun, bạn có thể bắt đầu sử dụng biểu thức thông thường:
Ví dụ: Tìm kiếm chuỗi để xem nó có bắt đầu bằng “The” và kết thúc bằng “Spain” hay không:
import re txt = "The rain in Spain" x = re.search("^The.*Spain$", txt)
Hàm Regex
Module re cung cấp một tập hợp các hàm cho phép chúng ta tìm kiếm một chuỗi phù hợp:
Hàm | Mô tả |
findall | Trả về danh sách chứa tất cả các kết quả phù hợp |
search | Trả về một đối tượng So khớp nếu có kết quả khớp ở bất kỳ vị trí nào trong chuỗi |
split | Trả về danh sách trong đó chuỗi đã được chia ở mỗi trận đấu |
sub | Thay thế một hoặc nhiều kết quả bằng một chuỗi |
Metacharacters
Metacharacters là những ký tự có ý nghĩa đặc biệt
Ký tự | Mô tả | Ví dụ |
[] | Một tập hợp các ký tự | “[a-m]” |
\ | Báo hiệu một chuỗi đặc biệt (cũng có thể được sử dụng để thoát khỏi các ký tự đặc biệt) | “\d” |
. | Bất kỳ ký tự nào (trừ ký tự dòng mới) | “he..o” |
^ | Bắt đầu với | “^hello” |
$ | Kết thúc bằng | “planet$” |
* | Không hoặc nhiều lần xuất hiện | “he.*o” |
+ | Một hoặc nhiều lần xuất hiện | “he.+o” |
? | Không hoặc một lần xuất hiện | “he.?o” |
{} | Chính xác số lần xuất hiện được chỉ định | “he.{2}o” |
| | Hoặc hoặc | “falls|stays” |
() | Chụp và nhóm |
Ký tự đặc biệt
Một chuỗi đặc biệt được \ theo sau bởi một trong các ký tự trong danh sách bên dưới và có ý nghĩa đặc biệt:
Ký tự | Mô tả | Ví dụ |
\A | Trả về kết quả khớp nếu các ký tự được chỉ định ở đầu chuỗi | “\AThe” |
\b | Trả về kết quả khớp trong đó các ký tự được chỉ định ở đầu hoặc cuối một từ | r”\bain” |
(“r” ở đầu là đảm bảo rằng chuỗi đang được coi là “chuỗi thô”) | r”ain\b” | |
\B | Trả về kết quả khớp trong đó có các ký tự được chỉ định, nhưng KHÔNG ở đầu (hoặc ở cuối) của một từ | r”\Bain” |
(“r” ở đầu là đảm bảo rằng chuỗi đang được coi là “chuỗi thô”) | r”ain\B” | |
\d | Trả về kết quả khớp trong đó chuỗi chứa các chữ số (các số từ 0-9) | “\d” |
\D | Trả về kết quả khớp trong đó chuỗi KHÔNG chứa chữ số | “\D” |
\s | Trả về kết quả khớp trong đó chuỗi chứa ký tự khoảng trắng | “\s” |
\S | Trả về kết quả khớp trong đó chuỗi KHÔNG chứa ký tự khoảng trắng | “\S” |
\w | Trả về kết quả khớp trong đó chuỗi chứa bất kỳ ký tự từ nào (ký tự từ a đến Z, chữ số từ 0-9 và ký tự gạch dưới _) | “\w” |
\W | Trả về kết quả khớp trong đó chuỗi KHÔNG chứa bất kỳ ký tự từ nào | “\W” |
\Z | Trả về kết quả khớp nếu các ký tự được chỉ định ở cuối chuỗi | “Spain\Z” |
Sets
Sets là tập hợp các ký tự bên trong một cặp dấu ngoặc vuông []có ý nghĩa đặc biệt:
Set | Mô tả |
[arn] | Trả về kết quả khớp trong đó có mặt một trong các ký tự được chỉ định (a, r hoặc n) |
[a-n] | Trả về kết quả khớp cho bất kỳ ký tự chữ thường nào, theo thứ tự bảng chữ cái giữa a và n |
[^arn] | Trả về kết quả trùng khớp cho bất kỳ ký tự nào NGOẠI TRỪ a, r và n |
[0123] | Trả về kết quả trùng khớp trong đó có bất kỳ chữ số nào được chỉ định (0, 1, 2 hoặc 3) |
[0-9] | Trả về kết quả trùng khớp cho bất kỳ chữ số nào từ 0 đến 9 |
[0-5][0-9] | Trả về kết quả trùng khớp cho mọi số có hai chữ số từ 00 và 59 |
[a-zA-Z] | Trả về kết quả khớp cho bất kỳ ký tự nào theo thứ tự bảng chữ cái giữa a và z, chữ thường HOẶC chữ hoa |
[+] | Trong các bộ, +, *, ., |, (), $,{} không có ý nghĩa đặc biệt, do đó,[+] có nghĩa là: trả về một kết quả trùng khớp cho bất kỳ ký tự + nào trong chuỗi |
Hàm findall()
Hàm findall() trả về một danh sách chứa tất cả các kết quả khớp.
Ví dụ: In danh sách tất cả các kết quả phù hợp:
import re txt = "The rain in Spain" x = re.findall("ai", txt) print(x)
Danh sách chứa các kết quả phù hợp theo thứ tự chúng được tìm thấy.
Nếu không tìm thấy kết quả phù hợp, một danh sách trống sẽ được trả về:
Ví dụ: Trả về danh sách trống nếu không tìm thấy kết quả khớp:
import re txt = "The rain in Spain" x = re.findall("Portugal", txt) print(x)
Hàm search()
Hàm search() tìm kiếm chuỗi để tìm kết quả khớp và trả về đối tượng Match nếu có kết quả khớp.
Nếu có nhiều hơn một kết quả trùng khớp, chỉ lần xuất hiện đầu tiên của trận đấu đó sẽ được trả về:
Ví dụ: Tìm kiếm ký tự khoảng trắng đầu tiên trong chuỗi:
import re txt = "The rain in Spain" x = re.search("\s", txt) print("The first white-space character is located in position:", x.start())
Nếu không tìm thấy kết quả phù hợp, giá trị Noneđược trả về:
Ví dụ: Thực hiện tìm kiếm không trả về kết quả nào:
import re txt = "The rain in Spain" x = re.search("Portugal", txt) print(x)
Hàm split ()
Hàm split() trả về danh sách trong đó chuỗi đã được phân tách ở mỗi so khớp:
Ví dụ: Tách từng ký tự khoảng trắng:
import re txt = "The rain in Spain" x = re.split("\s", txt) print(x)
Bạn có thể kiểm soát số lần xuất hiện bằng cách chỉ định maxsplit tham số:
Ví dụ: Chỉ tách chuỗi ở lần xuất hiện đầu tiên:
import re txt = "The rain in Spain" x = re.split("\s", txt, 1) print(x)
Hàm sub()
Hàm sub() thay thế các kết quả khớp bằng văn bản bạn chọn:
Ví dụ: Thay thế mọi ký tự khoảng trắng bằng số 9:
import re txt = "The rain in Spain" x = re.sub("\s", "9", txt) print(x)
Bạn có thể kiểm soát số lượng thay thế bằng cách chỉ định count tham số:
Ví dụ: Thay thế 2 lần xuất hiện đầu tiên:
import re txt = "The rain in Spain" x = re.sub("\s", "9", txt, 2) print(x)
Matching Object
Đối tượng So khớp là một đối tượng chứa thông tin về tìm kiếm và kết quả.
Lưu ý: Nếu không khớp, giá trị Nonesẽ được trả về thay vì Đối tượng khớp.
Ví dụ: Thực hiện tìm kiếm sẽ trả về Đối tượng phù hợp:
import re txt = "The rain in Spain" x = re.search("ai", txt) print(x) #this will print an object
Đối tượng Match có các thuộc tính và phương thức được sử dụng để truy xuất thông tin về tìm kiếm và kết quả:
- .span() trả về một bộ dữ liệu chứa vị trí bắt đầu và kết thúc của trận đấu.
- .string trả về chuỗi được truyền vào hàm
- .group() trả về phần của chuỗi có kết quả khớp
Ví dụ: In vị trí (vị trí bắt đầu và kết thúc) của lần xuất hiện khớp đầu tiên.
Biểu thức chính quy tìm kiếm bất kỳ từ nào bắt đầu bằng chữ hoa “S”:
import re txt = "The rain in Spain" x = re.search(r"\bS\w+", txt) print(x.span())
Ví dụ: In chuỗi được truyền vào hàm:
import re txt = "The rain in Spain" x = re.search(r"\bS\w+", txt) print(x.string)
Ví dụ: In phần của chuỗi nơi có kết quả khớp.
Biểu thức chính quy tìm kiếm bất kỳ từ nào bắt đầu bằng chữ hoa “S”:
import re txt = "The rain in Spain" x = re.search(r"\bS\w+", txt) print(x.group()
Nếu bạn là newbie có thể tham khảo bài viết này để tìm hiểu lộ trình học DA trong 3 tháng của SmartData.
Nếu bạn thấy bài viết hay và hữu ích, bạn có thể tham gia các kênh sau của SmartData để nhận được nhiều hơn nữa: