Tôi đang tìm kiếm một regex
mô hình sẽ phù hợp với sự xuất hiện thứ ba, thứ tư, ... của mỗi nhân vật. Nhìn bên dưới để làm rõ:
Ví dụ tôi có chuỗi sau:
111aabbccxccybbzaa1
Tôi muốn thay thế tất cả các nhân vật trùng lặp sau lần xuất hiện thứ hai. Đầu ra sẽ là:
11-aabbccx--y--z---
Một số mẫu regex mà tôi đã thử cho đến nay:
Sử dụng regex sau đây tôi có thể tìm thấy lần xuất hiện cuối cùng của mỗi nhân vật: (.)(?=.*\1)
Hoặc sử dụng cái này tôi có thể làm nó cho các bản sao liên tiếp nhưng không cho bất kỳ bản sao nào: ([a-zA-Z1-9])\1{2,}
(.)(?<=^(?:(?:(?!\1).)*\1){2,}(?:(?!\1).)*\1)
regex. Bản demo .
(.)(?<=(.*\1){3})
không?
(.)(?<=(?:.*\1){3})
cũng sẽ thực hiện công việc, nhưng tất cả những điều này đều không tốt vì việc quay lại quá mức có thể gây ra vấn đề với chuỗi dài hơn. Tôi muốn viết một phương pháp phi regex để giải quyết vấn đề.
(.)(?<=(?:.*\1){3})
25ms, (.)(?<=(?:\1.*?){2}\1)
3ms. Bạn chỉ có thể tự kiểm tra. Bạn dường như là mẫu kém hiệu quả nhất và khó đọc nhất.