Bộ ký tự trong biểu thức chính quy Python
Các nhóm ký tự \d và \w không
linh hoạt lắm. Ngay cả một nhiệm vụ đơn giản như
tìm tất cả các chữ cái, nhưng không phải chữ số -
cũng không thể được giải quyết bằng chúng. Đối với những nhiệm vụ như vậy
nên sử dụng dấu ngoặc vuông,
đại diện cho phép toán 'hoặc'.
Dấu ngoặc vuông thay thế cho một
ký tự, bất kỳ ký tự nào được liệt kê bên trong. Ví dụ, như thế này: x[abc]x -
chúng ta
nói rằng ở hai bên phải là chữ cái
x, và bên trong - một ký tự: hoặc 'a',
hoặc 'b', hoặc 'c'.
Sau dấu ngoặc vuông có thể viết
các toán tử lặp lại. Ví dụ, như thế này:
x[abc]+x - chúng ta nói rằng bên trong
các chữ x có thể có bất kỳ số lượng ký tự nào
'a', 'b' và 'c' - trong
bất kỳ tổ hợp nào.
Có thể không chỉ liệt kê các ký tự, mà còn
tạo ra các nhóm ký tự bằng cách viết giữa
hai ký tự một dấu gạch ngang. Ví dụ, như thế này:
[a-d] - chúng ta nhận được tất cả các ký tự từ
'a' đến 'd'.
Hãy xem xét các ví dụ.
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là bất kỳ chữ cái nào từ
'a' đến 'z':
Kết quả thực thi mã:
'! ! ! x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là bất kỳ chữ cái nào từ
'a' đến 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! xmx x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là bất kỳ chữ cái nào từ
'A' đến 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Kết quả thực thi mã:
'xax ! xcx x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là bất kỳ chữ số nào từ 0
đến 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Kết quả thực thi mã:
'xax ! ! ! x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là bất kỳ chữ số nào từ 3
đến 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Kết quả thực thi mã:
'xax x1x ! ! x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là bất kỳ chữ cái nào từ
'a' đến 'z' hoặc chữ số từ
1 đến 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! ! ! x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là bất kỳ chữ cái nào từ
'a' đến 'z' hoặc chữ cái từ
'A' đến 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! ! x5x x@x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là bất kỳ chữ cái nào từ
'a' đến 'z' hoặc các chữ số 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! ! ! x3x'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: giữa các chữ x là các chữ cái từ 'a'
đến 'z' với số lượng từ 1 trở lên:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Kết quả thực thi mã:
'xx ! ! ! x123x xa3x'
Ví dụ
Hãy làm sao cho số lượng chữ cái có thể là không:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Kết quả chúng ta nhận được:
'! ! ! ! x123x xa3x'
Ví dụ
Bên trong dấu ngoặc vuông cũng có thể chỉ định các ký tự được thoát. Hãy tìm một chuỗi các chữ cái và chữ số, lặp lại không hoặc nhiều lần:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Kết quả thực thi mã:
'! x@x ! ! !'
Ví dụ
Nếu chúng ta cần chỉ định thêm dấu ngoặc vuông khác, thì chúng ta cũng bắt buộc phải thoát chúng:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! ! x3x'
Bài tập thực hành
Cho chuỗi:
txt = 'aba aea aca aza axa'
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai bên là các chữ cái
'a', và giữa chúng - chữ cái 'b',
'e' hoặc 'x'.
Cho chuỗi:
txt = 'a1a a3a a7a a9a aba'
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai bên là các chữ cái
'a', và giữa chúng - chữ số từ
3 đến 6.
Cho chuỗi:
txt = 'aba aea afa aha aga'
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai bên là các chữ cái
'a', và giữa chúng - chữ cái từ
'a' đến 'g'.
Cho chuỗi:
txt = 'aba aea afa aha aga'
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai bên là các chữ cái
'a', và giữa chúng - chữ cái từ
'a' đến 'f' và từ 'j'
đến 'z'.
Cho chuỗi:
txt = 'aAa aea aEa aJa a3a'
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai bên là các chữ cái
'a', và giữa chúng - chữ cái từ
'a' đến 'f' và từ 'A'
đến 'D'.
Cho chuỗi:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai bên là các chữ cái
'a', và giữa chúng - các chữ cái Latinh
viết thường, mà không ảnh hưởng đến các phần còn lại.
Cho chuỗi:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai bên là các chữ cái
'a', và giữa chúng - các chữ cái Latinh viết thường và
viết hoa, mà không ảnh hưởng đến
phần còn lại.
Cho chuỗi:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Viết biểu thức chính quy, tìm theo
mẫu sau: ở hai bên là các chữ cái
'a', và giữa chúng - các chữ cái Latinh viết thường
và chữ số, mà không ảnh hưởng đến
phần còn lại.