Cờ cho chuỗi biểu thức chính quy trong Python
Để thiết lập cờ như một trong các tham số tùy chọn cho các phương thức làm việc với biểu thức chính quy, sử dụng cú pháp sau:
flags=re.tên cờ
Các cờ chính để làm việc với biểu thức chính quy
| Cờ | Chức năng |
|---|---|
re.IGNORECASE |
Bỏ qua kiểu chữ hoa/thường của ký tự. |
re.DOTALL |
Dấu chấm biểu thị bất kỳ ký tự nào, bao gồm cả ký tự xuống dòng. |
re.I |
Làm cho việc tìm kiếm không phân biệt chữ hoa/thường. |
re.L |
Tìm kiếm từ phù hợp với ngôn ngữ hiện tại.
Cách diễn giải này ảnh hưởng đến nhóm ký tự
chữ cái (\w và \W), cũng như
hành vi của ranh giới từ (\b và
\B).
|
re.M |
Ký tự $ thực hiện tìm kiếm ở cuối
bất kỳ dòng văn bản nào (không chỉ cuối văn bản)
và ký tự ^ thực hiện tìm kiếm ở đầu
bất kỳ dòng văn bản nào (không chỉ ở đầu
văn bản).
|
re.S |
Thay đổi giá trị của dấu chấm (.) thành
khớp với bất kỳ ký tự nào, bao gồm cả ký tự
xuống dòng mới.
|
re.U |
Diễn giải các chữ cái theo bộ ký tự
Unicode. Cờ này ảnh hưởng
đến hành vi của \w, \W, \b,
\B. Trong Python 3+, cờ này
được thiết lập mặc định.
|
re.X |
Cho phép cú pháp biểu thức chính quy nhiều dòng.
Nó bỏ qua khoảng trắng bên trong
mẫu (ngoại trừ khoảng trắng bên trong
bộ [] hoặc khi được thoát
bằng dấu gạch chéo ngược) và xử lý ký tự
'#' không được thoát như một chú thích.
|
Ví dụ
Với cờ re.IGNORECASE có thể
bỏ qua kiểu chữ hoa/thường của ký tự. Hãy
xem cách thực hiện. Trong ví dụ này
biểu thức chính quy sẽ chỉ tìm thấy các chữ cái viết thường:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! CCC DDD'
Ví dụ
Và bây giờ thêm vào tham số thứ tư
của phương thức cờ re.IGNORECASE và biểu thức chính quy
sẽ bắt đầu tìm ký tự ở mọi kiểu chữ hoa/thường:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Kết quả thực thi mã:
'! ! ! !'
Ví dụ
Hãy tìm tất cả ký tự xuống dòng bằng biểu thức chính quy:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Kết quả mã đã thực thi:
'aaa!bbb'
Ví dụ
Nhưng, nếu cần thay thế tất cả các ký tự, thì khi đặt dấu chấm trong biểu thức chính quy, các ký tự xuống dòng sẽ không bị chụp:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Kết quả mã đã thực thi:
'!!!
!!!'
Ví dụ
Để sửa lỗi này, nên
áp dụng cờ re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Kết quả mã đã thực thi:
'!!!!!!!'
Ví dụ
Trong tham số có thể truyền nhiều
cờ, bằng cách đặt toán tử +
giữa chúng.
Trước tiên hãy thay thế chữ cái 'a'
ở cuối dòng:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Kết quả mã đã thực thi:
'''
aaa
AAA
!
'''
Ví dụ
Bây giờ hãy đặt cờ re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Kết quả mã đã thực thi:
'''
!
AAA
!
'''
Ví dụ
Bây giờ hãy áp dụng thêm cờ để bỏ qua kiểu chữ hoa/thường:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Kết quả mã đã thực thi:
'''
!
!
!
'''