Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Sets và Ranges trong Regex của Python
Trong lập trình, việc tìm kiếm và khớp các chuỗi ký tự là một phần quan trọng và thường xuyên cần thiết. Python cung cấp công cụ mạnh mẽ để làm điều này thông qua regular expressions (regex). Một trong những tính năng quan trọng của regex là khả năng sử dụng các tập hợp (sets) và phạm vi (ranges) để tạo ra các mẫu khớp với các ký tự cụ thể. Trong bài viết này, bạn sẽ học cách sử dụng các tập hợp và phạm vi trong regex của Python để xây dựng các mẫu tìm kiếm hiệu quả, từ đó giúp bạn xử lý các chuỗi ký tự phức tạp một cách dễ dàng và linh hoạt.
Giới thiệu về Sets và Ranges trong Regex
Các ký tự hoặc tập ký tự bên trong dấu ngoặc vuông [] có nghĩa là khớp với bất kỳ ký tự hoặc tập ký tự nào trong số chúng.
Sets
Ví dụ, [abc] có nghĩa là bất kỳ một trong ba ký tự 'a', 'b', hoặc 'c'. [abc] được gọi là một tập hợp (set). Bạn có thể sử dụng tập hợp này cùng với các ký tự thông thường để xây dựng một mẫu tìm kiếm.
Ví dụ, chương trình sau sử dụng mẫu licen[cs]e
để khớp với cả hai từ license và licence:
Bài viết này được đăng tại [free tuts .net]
import re s = 'A licence or license' pattern = 'licen[cs]e' matches = re.finditer(pattern, s) for match in matches: print(match.group())
Output:
licence license
Mẫu licen[cs]e
tìm kiếm:
- licen
- sau đó là một trong các chữ cái [cs]
- rồi đến e.
Vì vậy, nó khớp với cả license và licence.
Ranges
Khi một tập hợp chứa nhiều ký tự ví dụ như từ a đến z hoặc từ 1 đến 9, sẽ rất tẻ nhạt khi liệt kê chúng trong một tập hợp. Thay vào đó, bạn có thể sử dụng các phạm vi ký tự trong dấu ngoặc vuông. Ví dụ, [a-z] là một ký tự trong phạm vi từ a đến z và [0-9] là một chữ số từ 0 đến 9.
Bạn cũng có thể sử dụng nhiều phạm vi trong cùng một dấu ngoặc vuông. Ví dụ, [a-z0-9] có hai phạm vi khớp với một ký tự từ a đến z hoặc một chữ số từ 0 đến 9.
Tương tự, bạn có thể sử dụng một hoặc nhiều tập hợp ký tự bên trong dấu ngoặc vuông như [\d\s] có nghĩa là một chữ số hoặc một ký tự khoảng trắng.
Ngoài ra, bạn có thể kết hợp ký tự với tập hợp ký tự. Ví dụ, [\d_] khớp với một chữ số hoặc một dấu gạch dưới.
Loại trừ Sets & Ranges trong Python
Để phủ định một tập hợp hoặc một phạm vi, bạn sử dụng ký tự dấu mũ (^) ở đầu tập hợp hoặc phạm vi. Ví dụ, phạm vi [^0-9] khớp với bất kỳ ký tự nào ngoại trừ một chữ số. Nó giống như tập hợp ký tự \D.
Lưu ý rằng regex cũng sử dụng dấu mũ (^) như một mỏ neo để khớp với đầu chuỗi. Tuy nhiên, nếu bạn sử dụng dấu mũ (^) bên trong dấu ngoặc vuông, regex sẽ coi nó là một toán tử phủ định, không phải là mỏ neo.
Ví dụ sau sử dụng dấu mũ (^) để phủ định tập hợp [aeoiu] nhằm khớp với các phụ âm trong chuỗi 'Python':
import re s = 'Python' pattern = '[^aeoiu]' matches = re.finditer(pattern, s) for match in matches: print(match.group())
Output:
P y t h n
Kết bài
Qua hướng dẫn này, bạn đã học cách sử dụng các tập hợp (sets) và phạm vi (ranges) trong regex của Python để tạo ra các mẫu tìm kiếm khớp với một tập ký tự nhất định. Sử dụng tập hợp và phạm vi giúp bạn xây dựng các biểu thức chính quy linh hoạt và hiệu quả hơn trong việc xử lý chuỗi ký tự. Bằng cách áp dụng những kiến thức này vào thực tế, bạn có thể thực hiện các tác vụ tìm kiếm và thay thế một cách chính xác và tối ưu hơn, từ đó nâng cao hiệu quả lập trình và xử lý dữ liệu của mình.