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. Show 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 ( 0. Để làm điều đó, bạn có thể đưa ra mô hình sau bao gồm trích dẫn (Hồi), bộ ký tự DOT ( 1) và bộ định lượng ( 2):
Ý nghĩa của mẫu như sau:
Sau đây sử dụng hàm 7 để khớp chuỗi 8 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 ( 9) 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 8. Tiếp theo, vì ký tự đầu tiên là 1 không khớp với báo giá ( 3), độ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 ( 3): Sau đó, động cơ Regex kiểm tra mẫu và khớp chuỗi với quy tắc tiếp theo 4. Bởi vì quy tắc 4 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 ( 2) để 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 ( 7) 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? |