Hướng dẫn greedy and non greedy regex in python - regex tham lam và không tham lam trong python
Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu về các bộ định lượng không màu xanh lá cây (hoặc lười biếng) phù hợp với các yếu tố trước đó của chúng càng ít càng tốt.: in this tutorial, you’ll learn about the regex non-greedy (or lazy) quantifiers that match their preceding elements as few times as possible. Show
Giới thiệu về các bộ định lượng không màu xanh lá cây (hoặc lười biếng) RegexĐịnh lượng cho phép bạn phù hợp với các yếu tố trước của chúng một số lần. Định lượng hoạt động ở một trong hai chế độ: tham lam và không tham lam (lười biếng). Khi các bộ định lượng hoạt động trong chế độ tham lam, chúng được gọi là định lượng tham lam. Tương tự, khi các bộ định lượng hoạt động ở chế độ không màu xanh lá cây, chúng được gọi là các bộ định lượng không màu xanh lá cây hoặc các bộ định lượng lười biếng. Theo mặc định, các bộ định lượng hoạt động trong chế độ tham lam. Điều đó có nghĩa là các bộ định lượng tham lam sẽ phù hợp với các yếu tố trước của chúng càng nhiều càng tốt để trở lại trận đấu lớn nhất có thể. Mặt khác, các bộ định lượng không màu xanh lá cây sẽ phù hợp càng ít càng tốt để trả về trận đấu nhỏ nhất có thể. Định lượng không xanh là trái ngược với những người tham lam. Để biến các bộ định lượng tham lam thành các bộ định lượng không tham lam, bạn thêm một dấu hỏi thêm (____10) vào các bộ định lượng. Bảng sau đây cho thấy các định lượng không tham lam và các định lượng không tham gia tương ứng của chúng:
Chương trình sau đây sử dụng bộ định lượng không màu xanh lá cây ( 4) để khớp với văn bản trong các trích dẫn ( 2) của một phần tử nút:
Output:
Bản tóm tắt
Bạn có thấy hướng dẫn này hữu ích không? Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu về chế độ tham lam Python Regex và cách thay đổi chế độ từ tham lam thành không tham lam.: in this tutorial, you’ll learn about the Python regex greedy mode and how to change the mode from greedy to non-greedy. Theo mặc định, tất cả các bộ định lượng hoạt động trong chế độ tham lam. Điều đó có nghĩa là các bộ định lượng sẽ cố gắng phù hợp với các yếu tố trước của chúng càng nhiều càng tốt. Hãy bắt đầu với một ví dụ để hiểu cách thức hoạt động của chế độ tham lam Regex. Kết quả bất ngờ với chế độ tham lamGiả sử bạn có đoạn HTML sau đại diện cho phần tử nút:
Và bạn muốn khớp các văn bản trong các trích dẫn ( 2) như 4 và 5. Để làm điều đó, bạn có thể đưa ra các mẫu sau bao gồm trích dẫn (Hồi), bộ ký tự DOT ( 6) và bộ định lượng ( 3):
Ý nghĩa của mẫu như sau:
Sau đây sử dụng hàm 2 để khớp chuỗi 3 với mẫu:
Chương trình hiển thị kết quả sau:
Kết quả không phải là những gì bạn mong đợi. Theo mặc định, bộ định lượng (+) chạy ở chế độ tham lam, trong đó nó cố gắng khớp với phần tử trước ( 4) càng nhiều càng tốt. Làm thế nào Python Regex Chế độ tham lam hoạt độngĐầu tiên, động cơ Regex bắt đầu khớp với ký tự đầu tiên trong chuỗi 3. Tiếp theo, vì ký tự đầu tiên là 6 không khớp với báo giá ( 8), động cơ Regex tiếp tục khớp với các ký tự tiếp theo cho đến khi nó đạt được báo giá đầu tiên ( 8): Sau đó, động cơ Regex kiểm tra mẫu và khớp chuỗi với quy tắc tiếp theo 9. Bởi vì quy tắc 9 khớp với một ký tự một hoặc nhiều lần, động cơ Regex khớp với tất cả các ký tự cho đến khi nó đi đến cuối chuỗi: Sau đó, động cơ Regex kiểm tra quy tắc cuối cùng trong mẫu, đó là một trích dẫn (Hồi). Tuy nhiên, nó đã đạt đến cuối chuỗi. Không có nhân vật nào phù hợp. Nó là quá tham lam để đi quá xa. Cuối cùng, động cơ Regex quay trở lại từ cuối chuỗi để tìm trích dẫn (Hồi). Bước này được gọi là quay lại.backtracking. Kết quả là, trận đấu là chuỗi con sau đây không phải là những gì chúng tôi mong đợi:
Để khắc phục sự cố này, bạn cần hướng dẫn bộ định lượng ( 3) sử dụng chế độ không tham lam (hoặc lười biếng) thay vì chế độ tham lam. Để làm điều đó, bạn thêm một dấu hỏi ( 0) sau khi định lượng như thế này:
Chương trình sau đây trả về kết quả dự kiến:
Output:
Bản tóm tắt
Bạn có thấy hướng dẫn này hữu ích không? Regex tham lam là gì?Tham lam: càng nhiều càng tốt (ví dụ như trận đấu dài nhất), lấy bộ định lượng +. Nó cho phép động cơ khớp với một hoặc nhiều mã thông báo mà nó định lượng: \ d+ do đó có thể khớp với một hoặc nhiều chữ số. Nhưng "một hoặc nhiều" khá mơ hồ: trong chuỗi 123, "một hoặc nhiều chữ số" (bắt đầu từ bên trái) có thể là 1, 12 hoặc 123.As Many As Possible (longest match)
For instance, take the + quantifier. It allows the engine to match one or more of the token it quantifies: \d+ can therefore match one or more digits. But "one or more" is rather vague: in the string 123, "one or more digits" (starting from the left) could be 1, 12 or 123.
Ý nghĩa của việc không tham lam là gì?Từ 'thanh đạm' có thể được sử dụng để mô tả một người 'không tham lam. 'Tom là một người đàn ông thanh đạm. Từ thanh đạm có nghĩa là: kinh tế trong sử dụng hoặc chi tiêu; thận trọng tiết kiệm hoặc tiết kiệm; không lãng phí.economical in use or expenditure; prudently saving or sparing; not wasteful.
Mô hình tham lam là gì?'Tham lam' có nghĩa là khớp chuỗi dài nhất có thể.'Lazy' có nghĩa là khớp chuỗi ngắn nhất có thể.Ví dụ, tham lam h.+l khớp với 'địa ngục' trong 'xin chào' nhưng lười biếng h.match longest possible string. 'Lazy' means match shortest possible string. For example, the greedy h. +l matches 'hell' in 'hello' but the lazy h.
Các loại biểu thức thông thường khác nhau trong Python là gì?Python cung cấp hai hoạt động nguyên thủy khác nhau dựa trên các biểu thức thông thường: kiểm tra đối sánh chỉ cho một trận đấu ở đầu chuỗi, trong khi tìm kiếm kiểm tra đối sánh ở bất cứ đâu trong chuỗi (đây là những gì Perl làm theo mặc định).match checks for a match only at the beginning of the string, while search checks for a match anywhere in the string (this is what Perl does by default). |