re --- biểu thức chính quy đơn giản¶
Mô-đun này triển khai các thao tác biểu thức chính quy. Cú pháp biểu thức chính quy được hỗ trợ là tập con của mô-đun re trong CPython (và thực tế là tập con của biểu thức chính quy mở rộng POSIX).
Các toán tử và chuỗi đặc biệt được hỗ trợ:
.Khớp với bất kỳ ký tự nào.
[...]Khớp với tập hợp ký tự. Hỗ trợ các ký tự đơn lẻ và các dải ký tự, bao gồm cả tập hợp phủ định (ví dụ:
[^a-c]).^Khớp với đầu chuỗi.
$Khớp với cuối chuỗi.
?Khớp không hoặc một lần mẫu con trước đó.
*Khớp không hoặc nhiều lần mẫu con trước đó.
+Khớp một hoặc nhiều lần mẫu con trước đó.
??Phiên bản không tham lam của
?, khớp không hoặc một lần, ưu tiên không khớp.*?Phiên bản không tham lam của
*, khớp không hoặc nhiều lần, ưu tiên khớp ngắn nhất.+?Phiên bản không tham lam của
+, khớp một hoặc nhiều lần, ưu tiên khớp ngắn nhất.|Khớp với mẫu con bên trái hoặc bên phải của toán tử này.
(...)Nhóm. Mỗi nhóm đều được bắt giữ (chuỗi con mà nó bắt giữ có thể truy cập bằng phương thức
match.group()).(?:...)Nhóm không bắt giữ. Mỗi nhóm được khớp theo cùng quy tắc như nhóm thông thường, nhưng sẽ không thuộc đối tượng khớp.
\dKhớp với chữ số. Tương đương với
[0-9].\DKhớp với ký tự không phải chữ số. Tương đương với
[^0-9].\sKhớp với khoảng trắng. Tương đương với
[ \t-\r].\SKhớp với ký tự không phải khoảng trắng. Tương đương với
[^ \t-\r].\wKhớp với "ký tự từ" (chỉ ASCII). Tương đương với
[A-Za-z0-9_].\WKhớp với ký tự không phải "ký tự từ" (chỉ ASCII). Tương đương với
[^A-Za-z0-9_].\Ký tự thoát. Bất kỳ ký tự nào khác theo sau dấu gạch chéo ngược, ngoại trừ những ký tự đã liệt kê ở trên, sẽ được hiểu theo nghĩa đen. Ví dụ:
\*tương đương với ký tự*(không được xử lý như toán tử*). Lưu ý rằng\r,\n, v.v. không được xử lý đặc biệt và sẽ tương đương với các chữ cáir,n, v.v. Do đó, không nên sử dụng chuỗi Python thô (r"") cho biểu thức chính quy. Ví dụ:r"\r\n"khi dùng làm biểu thức chính quy tương đương với"rn". Để khớp ký tự CR theo sau bởi LF, hãy dùng"\r\n".
KHÔNG ĐƯỢC HỖ TRỢ:
lặp có số lần xác định (
{m,n})nhóm được đặt tên (
(?P<name>...))các khẳng định nâng cao hơn (
\b,\B)ký tự thoát đặc biệt như
\r,\n- hãy dùng cách thoát của Python thay thếv.v.
Ví dụ:
import re
# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")
regex.split("line1\rline2\nline3\r\n")
# Result:
# ['line1', 'line2', 'line3', '', '']
Các hàm¶
- re.compile(regex_str: str, flags: int = 0) 'regex'¶
Biên dịch biểu thức chính quy, trả về đối tượng regex.
- re.search(regex_str: str, string: str) 'match | None'¶
Biên dịch regex_str và tìm kiếm trong string. Khác với
match, hàm này sẽ tìm kiếm trong chuỗi từ vị trí đầu tiên khớp với regex (vị trí đó vẫn có thể là 0 nếu regex được neo đầu).
- re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str¶
Biên dịch regex_str và tìm kiếm trong string, thay thế tất cả các khớp bằng replace, và trả về chuỗi mới.
replace có thể là chuỗi hoặc hàm. Nếu là chuỗi thì có thể dùng chuỗi thoát dạng
\<number>và\g<number>để mở rộng thành nhóm tương ứng (hoặc chuỗi rỗng cho nhóm không khớp). Nếu replace là hàm thì hàm đó phải nhận một đối số (đối tượng khớp) và trả về chuỗi thay thế.Nếu count được chỉ định và khác không thì việc thay thế sẽ dừng lại sau khi thực hiện đủ số lần thay thế đó. Đối số flags bị bỏ qua.
Đối tượng Regex¶
Biểu thức chính quy đã được biên dịch. Các thực thể của lớp này được tạo bằng re.compile().
- class re.regex
Đối tượng biểu thức chính quy đã biên dịch được trả về bởi
re.compile().- match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'¶
Áp dụng regex đã biên dịch này lên string, neo tại đầu vùng tìm kiếm, và trả về đối tượng
match, hoặcNonenếu regex không khớp. Đây là phiên bản tương đương vớimatchở cấp mô-đun nhưng dùng mẫu đã biên dịch, và hiệu quả hơn nhiều khi áp dụng cùng một mẫu lên nhiều chuỗi.Tham số tùy chọn pos cho biết chỉ số trong string từ nơi bắt đầu tìm kiếm; mặc định là
0. Điều này không hoàn toàn tương đương với việc cắt lát chuỗi; ký tự mẫu'^'khớp ở đầu thực sự của chuỗi và ở các vị trí ngay sau ký tự xuống dòng, nhưng không nhất thiết tại chỉ số bắt đầu tìm kiếm.Tham số tùy chọn endpos giới hạn phạm vi tìm kiếm trong string; kết quả sẽ như thể chuỗi chỉ dài endpos ký tự, tức là chỉ các ký tự từ pos đến
endpos - 1được tìm kiếm. Nếu endpos làNone(mặc định) thì toàn bộ chuỗi sẽ được tìm kiếm.
- search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'¶
Quét qua string để tìm vị trí đầu tiên mà regex đã biên dịch này tạo ra khớp, và trả về đối tượng
match, hoặcNonenếu không có vị trí nào khớp. Đây là phiên bản tương đương với hàmsearch()ở cấp mô-đun nhưng dùng mẫu đã biên dịch, và hiệu quả hơn nhiều khi áp dụng cùng một mẫu lên nhiều chuỗi.Tham số tùy chọn pos cho biết chỉ số trong string từ nơi bắt đầu tìm kiếm; mặc định là
0. Điều này không hoàn toàn tương đương với việc cắt lát chuỗi; ký tự mẫu'^'khớp ở đầu thực sự của chuỗi và ở các vị trí ngay sau ký tự xuống dòng, nhưng không nhất thiết tại chỉ số bắt đầu tìm kiếm.Tham số tùy chọn endpos giới hạn phạm vi tìm kiếm trong string; kết quả sẽ như thể chuỗi chỉ dài endpos ký tự, tức là chỉ các ký tự từ pos đến
endpos - 1được tìm kiếm. Nếu endpos làNone(mặc định) thì toàn bộ chuỗi sẽ được tìm kiếm.
- sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str¶
Tìm kiếm regex đã biên dịch này trong string, thay thế tất cả các khớp bằng replace, và trả về chuỗi mới. Đây là phiên bản tương đương với hàm
sub()ở cấp mô-đun nhưng dùng mẫu đã biên dịch, và hiệu quả hơn nhiều khi áp dụng cùng một mẫu lên nhiều chuỗi.replace có thể là chuỗi hoặc hàm. Nếu là chuỗi thì có thể dùng chuỗi thoát dạng
\<number>và\g<number>để mở rộng thành nhóm tương ứng (hoặc chuỗi rỗng cho nhóm không khớp). Nếu replace là hàm thì hàm đó phải nhận một đối số (đối tượng khớp) và trả về chuỗi thay thế.Nếu count được chỉ định và khác không thì việc thay thế sẽ dừng lại sau khi thực hiện đủ số lần thay thế đó. Đối số flags bị bỏ qua.
Đối tượng khớp¶
Đối tượng khớp lưu trữ kết quả của một lần khớp thành công.
- class re.match(regex_str: str, string: str)¶
Khớp regex_str với string, neo tại đầu chuỗi, và trả về đối tượng khớp, hoặc
Nonenếu không khớp. Đây là lối tắt ở cấp mô-đun:re.match(regex_str, string)tương đương vớire.compile(regex_str).match(string).Cùng một đối tượng khớp cũng được trả về bởi
search(), bởi các phương thứcregex.match()/regex.search()của mẫu đã biên dịch, và được truyền vào hàm thay thế dùng bởisub().