2016-07-02 25 views
6

Tôi có một biểu hiện thường xuyên để tìm kiếm cho một chuỗi chứa '.00.' hoặc '.11.' như sau:Thay thế tất cả các lần xuất hiện phù hợp với biểu thức chính quy

.*\.(00|11)\..* 

Những gì tôi muốn làm là thay thế tất cả các lần xuất hiện phù hợp với mô hình với 'X00X' hoặc 'X11X'. Ví dụ: chuỗi '.00..0..11.' sẽ dẫn đến 'X00X.0.X11X'.

Tôi đã xem xét phương thức Python re.sub và không chắc chắn về cách thực hiện điều này một cách hiệu quả. Đối tượng kết quả trả về chỉ khớp với lần xuất hiện đầu tiên và do đó không hoạt động tốt. Lời khuyên nào? Tôi chỉ nên sử dụng một chuỗi thay thế cho nhiệm vụ này? Cảm ơn.

Trả lời

8

re.sub() thay thế tất cả các kết quả phù hợp, nhưng việc bạn sử dụng .* có thể khiến cho regex khớp quá nhiều (thậm chí các lần xuất hiện khác của .00., v.v.). Đơn giản chỉ cần làm:

In [2]: re.sub(r"\.(00|11)\.", r"X\1X", ".00..0..11.") 
Out[2]: 'X00X.0.X11X' 

Lưu ý rằng mô hình không thể chồng lên nhau:

In [3]: re.sub(r"\.(00|11)\.", r"X\1X", ".00.11.") 
Out[3]: 'X00X11.' 
+0

Liệu re.sub tìm kiếm sử dụng và không phù hợp? Tôi đã sử dụng. * Kể từ khi tôi giả sử nó đã sử dụng phù hợp. –

+0

Trong Python, 'match' tìm kiếm một kết quả phù hợp ở đầu chuỗi, nó không yêu cầu kết hợp chuỗi đầy đủ. 're.sub' tìm tất cả các chuỗi không trùng lặp khớp với mẫu và thay thế chúng. –

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