Nếu bạn tình cờ đọc được bài viết này và chưa quen với loạt bài hướng dẫn về cụm từ thông dụng này, vui lòng xem qua phần còn lại của loạt bài này [theo thứ tự]
- Biểu thức chính quy. Khái niệm cơ bản
- Biểu thức chính quy. Nhóm & ký tự đường ống
- Biểu thức chính quy. Sự lặp lại & Kết hợp tham lam/không tham lam
- Biểu thức chính quy. Lớp ký tự & Phương thức findall[]
- Biểu thức chính quy. Dot-Star và các ký tự Caret/Dollar
- Biểu thức chính quy. sub[] Phương thức và Chế độ chi tiết
Bây giờ chúng ta đã hiểu rõ về cách nhóm liên quan đến biểu thức chính quy, chúng ta có thể đi sâu vào các khái niệm phức tạp hơn như toán tử lặp lại
Toán tử lặp lại là các ký tự meta đặc biệt. ? . Các ký tự lặp lại này được sử dụng để chỉ định số lần một mẫu phụ có thể xảy ra và chúng hoạt động khác nhau trong các tình huống khác nhau
Dấu chấm hỏi [?]
Trong regex, ký tự meta “?” . Biểu tượng này khớp với 0 hoặc một phiên bản của ký tự/nhóm trước đó. Ví dụ: biểu thức chính quy [T]?he có nghĩa là. chữ hoa 'T' là tùy chọn, sau đó là chữ thường 'h' và 'e'
[T]he => The car is parked in the garage.
Kiểm tra biểu thức chính quy
[T]?he => The car is parked in the garage.
Kiểm tra biểu thức chính quy
ví dụ 1. Thực hiện dấu chấm hỏi
Hãy cùng khám phá regex. Bat[wo]?man. Có vẻ như chúng ta đã nhóm [wo] lại với nhau và có dấu chấm hỏi [?] theo sau nghĩa là nhóm [wo] là tùy chọn [chỉ có 0 hoặc 1]
Nếu chúng ta phân tích chuỗi ở trên, “The Adventures of Batman”, chúng ta có thể thấy rằng mẫu biểu thức chính quy sẽ khớp với “Batman” vì [wo] là tùy chọn
ví dụ 2. Triển khai Dấu chấm hỏi [tiếp theo]
Phân tích chuỗi từ trên, chúng ta sẽ thấy rằng mẫu biểu thức chính quy sẽ vẫn khớp với “Batwoman”ví dụ 3. Triển khai Dấu chấm hỏi [tiếp theo]
Đối với chuỗi này, "The Adventures of Batwowowowowoman", mẫu biểu thức chính quy sẽ không khớp với bất kỳ thứ gì. Nhóm [wo] lặp đi lặp lại nhiều lần
Quay trở lại ví dụ về số điện thoại, nếu chúng ta muốn đặt mã vùng là tùy chọn thì đây là mẫu biểu thức chính quy của chúng ta sẽ như thế nào
phoneRegex = re.compile[r’[\d\d\d]-]?\d\d\d-\d\d\d\d’]phoneRegex.search[‘My phone number is 415–555–1234. Call me tomorrow.’] # WORKSphoneRegex.search[‘My phone number is 555–1234. Call me tomorrow.’] # WORKS
Dấu hoa thị [*]
Dấu hoa thị [*] khớp với 0 hoặc nhiều lần lặp lại của nhóm/ký tự trước đó. Regex, a*, có nghĩa là. không hoặc nhiều lần lặp lại ký tự chữ thường trước đó 'a'
Ví dụ 4. Thực hiện dấu hoa thị
Ví dụ này là một trong những ví dụ giống như khi chúng ta thảo luận về toán tử lặp lại dấu chấm hỏi
biểu thức chính quy. Bat[wo]*man. Bạn có thể thấy rằng phía trước nhóm [wo], có một dấu hoa thị theo sau nó, điều đó có nghĩa là không thể có hoặc nhiều nhóm [wo] trong một chuỗi. Regex được áp dụng sẽ phù hợp với chuỗi đã cho này
Dấu cộng [+]
Ký hiệu cộng [+] khớp với một hoặc nhiều lần lặp lại của nhóm/ký tự trước đó. Ví dụ, biểu thức chính quy, c. +t, có nghĩa là. chữ c viết thường, theo sau là ít nhất một ký tự, theo sau là ký tự viết thường t. Cần phải làm rõ rằng 't' là 't' cuối cùng trong câu
Bạn sẽ nhận thấy một khoảng thời gian trong regex. Dấu chấm là một ký tự meta đặc biệt khác về cơ bản khớp với bất kỳ ký tự đơn nào ngoại trừ dấu ngắt dòng [\n]
c.+t => The fat cat sat on the mat
Kiểm tra biểu thức chính quy
Ví dụ 5. Triển khai biểu tượng Plus
biểu thức chính quy. “Bat[wo]+man” cũng sẽ khớp với “Batwowowowowoman” cho chuỗi trênThoát ?, *, +______4
Nếu chúng ta muốn thoát khỏi bất kỳ ký tự meta nào như ?, * hoặc +, chúng ta chỉ cần đặt dấu gạch chéo ngược trước chúng để tìm kiếm các ký tự đó
regex = re.compile[r’[\+\*\?]+’]regex.search[‘I learned about +*?+*?+*?+*?+*? regex syntax’]
Trong biểu thức chính quy ở trên, chúng tôi đã thoát dấu +, *, ? . Chúng tôi đang khớp nhóm, [\+\*\?], một hoặc nhiều lần
Sự lặp lại trong Regex - Bộ định lượng
Trong các biểu thức chính quy, dấu ngoặc nhọn thường được sử dụng làm bộ định lượng để chỉ định số lần một ký tự hoặc một nhóm ký tự có thể được lặp lại
Ví dụ 6. định lượng
Hãy xem mẫu regex ở trên. [Hà]{3}
Những gì chúng tôi đang nói là, "khớp một chuỗi lặp lại nhóm [Ha] 3 lần"
Ví dụ 7. Bộ định lượng [con’t]
Trong biểu thức chính quy ở trên, chúng tôi đã đặt mã vùng là tùy chọn và chỉ định rằng chúng tôi muốn khớp 3 số điện thoại trong chuỗi
Ví dụ 8. {x, y} - [ít nhất là x, nhiều nhất là y]
Chúng tôi cũng có thể khớp một loạt các lần lặp lại có thể có {x, y} [ít nhất là x số lần và nhiều nhất là y số lần]
Trong biểu thức chính quy ở trên, chúng tôi khớp tối thiểu [Ha] ba lần và tìm kiếm tối đa 5 lần
Ví dụ 9. {, 5} - Bỏ qua số đầu tiên sẽ được coi là 0
haRegex = re.compile[r’[Ha]{,5}’]
Ở đây chúng tôi chỉ đơn giản là bỏ đi số đầu tiên. Nếu chúng tôi không chỉ định số đầu tiên trong phạm vi, trình thông dịch sẽ cho rằng phạm vi bắt đầu từ 0. Do đó, phạm vi là 0–5
Ví dụ 10. {3, } - Bỏ qua số cuối cùng sẽ cho rằng kết thúc là không xác định
haRegex = re.compile[r’[Ha]{3,}’]
Ở đây, chúng tôi giả sử rằng phạm vi bắt đầu từ 3 và kết thúc là không xác định có nghĩa là mẫu biểu thức chính quy tìm kiếm 3 hoặc nhiều hơn
Ví dụ 11. Thực hiện một phạm vi
________số 8Trong biểu thức chính quy này, về cơ bản, chúng tôi đang tìm kiếm 3–5 chữ số trong một chuỗi
Một lưu ý nhỏ về So khớp tham lam và không tham lam
Biểu thức chính quy bắt đầu khớp ngay lập tức. Trận đấu sớm nhất họ có thể tìm thấy là những gì nó sẽ trả lại. Theo mặc định, các biểu thức chính quy thực hiện các đối sánh tham lam. Các trận đấu tham lam về cơ bản là các chuỗi dài nhất có thể được khớp và trả về theo mẫu biểu thức chính quy
Ví dụ 12. Trận đấu không tham lam
digitRegex = re.compile[r’[\d]{3,5}?’]digitRegex.search[‘1234567890’]
Hãy cùng khám phá regex ở trên chi tiết hơn. Nếu chúng ta đặt dấu chấm hỏi sau phạm vi trước đó, mẫu biểu thức chính quy sẽ chỉ duyệt qua và khớp với số lần lặp lại tối thiểu chứ không phải số lần lặp lại tối đa