2012-09-23 31 views
6

Tôi đã chuyển sang Python khá gần đây và tôi quan tâm đến việc làm sạch một số lượng lớn các trang web (khoảng 12k) (nhưng có thể được coi là tệp văn bản dễ dàng) bằng cách xóa một số thẻ cụ thể hoặc một số mẫu chuỗi khác. Đối với điều này tôi đang sử dụng hàm re.sub (..) trong Python.Thay thế bằng cách sử dụng nhiều regex hoặc lớn hơn bằng Python

Câu hỏi của tôi là tốt hơn (từ quan điểm hiệu quả) để tạo một biểu thức chính quy lớn phù hợp với nhiều mẫu của tôi hoặc gọi hàm nhiều lần với các biểu thức chính quy nhỏ hơn và đơn giản hơn.

Để minh họa, nó là tốt hơn để sử dụng một cái gì đó giống như

re.sub(r"<[^<>]*>", content) 
re.sub(r"some_other_pattern", content) 

hoặc

re.sub(r"<[^<>]*>|some_other_pattern",content) 

Tất nhiên, vì lợi ích của khuôn mẫu cho các mô hình trước đó là thực sự đơn giản và tôi đã không được biên dịch chúng ở đây, nhưng trong kịch bản thực tế của tôi, tôi sẽ

LE: Câu hỏi không liên quan đến bản chất HTML của các tệp, nhưng đối với hành vi của Python khi xử lý nhiều mẫu regex.

Cảm ơn!

+2

[Cảnh báo bắt buộc về phân tích cú pháp HTML với regex] (http://stackoverflow.com/a/1732454/950912) – brc

+0

Thực ra, như tôi đã nói, chủ yếu không phải là loại bỏ và phân tích văn bản HTML mà còn loại bỏ một số không cụ thể Các mẫu liên quan đến HTML. Câu hỏi của tôi cũng có thể được đặt chung hơn về các tập tin văn bản đơn giản và thay thế một loạt các mẫu trong chúng –

+0

Tôi nghĩ rằng nó đi xuống như thế nào tốt bạn đang có với regex ... nếu bạn có thể làm điều đó với một sử dụng một ... Tôi có lẽ sẽ phá vỡ nó thành một số chỉ để dễ dàng hơn để phân tích cú pháp của con người ... –

Trả lời

3

Giữ đơn giản.

Tôi muốn nói rằng bạn an toàn hơn bằng cách sử dụng Regexes nhỏ hơn để phân tích cú pháp thông qua nội dung này. Ít nhất theo cách đó nếu nó hoạt động bất thường, bạn không cần phải đào bới để tìm phần cụ thể nào của Regex khổng lồ đang hoạt động lạ lùng. Cung cấp cho bạn có đăng nhập tốt của các thay thế bạn làm, nó sẽ là tầm thường để xác định nguồn gốc của vấn đề, nên một trong những phát sinh.

Bạn không muốn chạy vào this

2

Nói chung, "tuần tự" và ứng dụng "song song" là không giống nhau và có thể tạo ra kết quả khác nhau, bởi vì thay thế tuần tự có thể ảnh hưởng lẫn nhau.

Về hiệu suất tôi đoán một biểu thức sẽ hoạt động tốt hơn, nhưng đó chỉ là phỏng đoán. Cá nhân tôi thích giữ phức tạp và sử dụng chế độ "tiết" để có thể đọc được.

1

Tôi hiểu nhận xét bổ sung của bạn về "các phần không phải HTML của tôi mà tôi đang dọn dẹp". Do khả năng tìm kiếm và thay thế nội dung RE mà RE sớm hơn thay thế, bạn nên sử dụng toán tử "thay thế" và sử dụng RE đơn lẻ.

Ngoài ra, hãy xem xét sử dụng BeautifulSoup để tải và kiểm tra tệp HTML của bạn. Điều này sẽ hỗ trợ trong việc tìm kiếm các phần thích hợp của văn bản của bạn với ít nguy cơ chụp một số cấu trúc HTML khi bạn chỉ có ý định thay thế một số văn bản.

Các vấn đề liên quan