Nhóm ký tự trong biểu thức chính quy Python
Tồn tại các lệnh đặc biệt cho phép chọn
ngay lập tức toàn bộ nhóm ký tự. Lệnh \d có nghĩa là chữ số
từ 0 đến 9. Lệnh \w
biểu thị chữ số, chữ cái Latinh hoặc dấu
gạch dưới. Lệnh \s biểu thị
khoảng trắng hoặc ký tự khoảng trắng: dấu cách,
dòng mới, tab. Có thể đảo ngược giá trị
của lệnh bằng cách viết chữ hoa:
ví dụ: nếu \d - là chữ số, thì
\D - không phải chữ số.
Ví dụ
Hãy tìm tất cả các chữ số:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Kết quả thực thi mã:
'! !! !!!'
Ví dụ
Các toán tử lặp coi các lệnh-nhóm
là một thể thống nhất, tức là không cần
dấu ngoặc nhóm. Trong ví dụ tiếp theo, mẫu tìm kiếm
trông như thế này: chữ số từ 0 đến
9 một hoặc nhiều lần:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! ! abc @@@'
Ví dụ
Trong ví dụ tiếp theo, mẫu tìm kiếm trông
như thế này: bất cứ thứ gì một hoặc nhiều lần,
nhưng không phải chữ số từ 0 đến 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Kết quả thực thi mã:
'123!3!'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông như thế này: ký tự khoảng trắng một lần:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Kết quả thực thi mã:
'1!12!123!abc!@@@'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: KHÔNG phải ký tự khoảng trắng một hoặc nhiều
lần. Tất cả các chuỗi con, được phân cách bởi
khoảng trắng, sẽ được thay thế bằng '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! ! ! !'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: chữ số hoặc chữ cái một hoặc nhiều
lần. Tất cả các chuỗi con, bao gồm chữ số
và chữ cái, sẽ được thay thế bằng '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Kết quả thực thi mã:
'! ! ! ! @@@'
Ví dụ
Trong ví dụ này, mẫu tìm kiếm trông
như thế này: KHÔNG phải chữ số và KHÔNG phải chữ cái một hoặc nhiều
lần. Theo định nghĩa này trong trường hợp của chúng ta
phù hợp với '@@@' và tất cả các khoảng trắng
(chúng cũng không phải chữ số và không phải chữ cái).
Hãy chú ý rằng ở cuối có một
'!' - nó được chuyển đổi từ chuỗi
' @@@' - với một khoảng trắng ở phía trước:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Kết quả thực thi mã:
'1!12!123!Abc!'
Bài tập thực hành
Cho chuỗi:
txt = 'a1a a2a a3a a4a a5a aba aca'
Viết biểu thức chính quy tìm các chuỗi,
trong đó ở hai đầu là các chữ cái 'a',
và giữa chúng là một chữ số.
Cho chuỗi:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Viết biểu thức chính quy tìm các chuỗi,
trong đó ở hai đầu là các chữ cái 'a',
và giữa chúng là bất kỳ số lượng chữ số nào.
Cho chuỗi:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Viết biểu thức chính quy tìm các chuỗi,
trong đó ở hai đầu là các chữ cái 'a',
và giữa chúng là bất kỳ số lượng chữ số nào (bao gồm
cả số không chữ số, tức là chuỗi
'aa').
Cho chuỗi:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Viết biểu thức chính quy tìm các chuỗi
có dạng sau: ở hai đầu là các chữ cái
'a' và 'b', và giữa chúng -
không phải số và không phải khoảng trắng.
Cho chuỗi:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Viết biểu thức chính quy tìm các chuỗi
có dạng sau: ở hai đầu là các chữ cái
'a' và 'b', và giữa chúng -
không phải chữ cái, không phải chữ số và không phải khoảng trắng.
Cho chuỗi:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Viết biểu thức chính quy thay thế tất cả
khoảng trắng bằng '!'.