Trước hết câu hỏi được gắn thẻ với Python
và regex
nhưng nó không thực sự gắn liền với chúng - một câu trả lời có thể ở mức cao.Tách chuỗi bởi sự xuất hiện đầu tiên từ một tập hợp các dấu phân cách bằng Python và regex
Hiện tại tôi đang tách một chuỗi có nhiều dấu phân tách bằng mẫu sau. Có rất nhiều bằng chứng thực sự khoanh vùng nhiều hơn và họ rất phức tạp hơn, nhưng chúng ta hãy giữ cho nó đơn giản và hạn chế chúng để 2 nhân vật - #
và *
:
parts = re.split('#|*', string)
Những cách tiếp cận như vậy một chuỗi aaa#bbb*ccc#ddd
được chia cho 4 chuỗi con aaa
, bbb
, ccc
, ddd
. Nhưng nó được yêu cầu phải phân tách bằng dấu phân tách xuất hiện đầu tiên trong chuỗi hoặc theo dấu phân cách thường xuyên nhất trong chuỗi. aaa#bbb*ccc#ddd
phải được chia thành aaa
, bbb*ccc
, ddd
và aaa*bbb#ccc*ddd
phải được chia thành aaa
, bbb#ccc
, ddd
.
Tôi biết một cách đơn giản để đạt được điều đó - để tìm dấu phân cách nào xảy ra trước tiên hoặc thường xuyên nhất trong chuỗi và sau đó chia tách với dấu phân tách đơn đó. Nhưng phương pháp này phải hiệu quả và tôi tự hỏi liệu có thể đạt được điều đó bằng một biểu thức chính quy duy nhất hay không. Câu hỏi chủ yếu là để tách với sự xuất hiện đầu tiên của tập hợp các dấu phân tách - đối với trường hợp phân cách thường xuyên nhất gần như chắc chắn nó sẽ được yêu cầu để tính toán số lần xuất hiện trước.
Cập nhật:
Câu hỏi đặt ra không yêu cầu chia theo xuất hiện đầu tiên hoặc delimiter thường gặp nhất cùng một lúc - bất kỳ các phương pháp này riêng lẻ nào sẽ là đủ. Tôi hiểu rằng việc phân tách bằng dấu phân cách thường xuyên nhất là không thể với regex mà không có sự xác định sơ bộ của dấu phân cách nhưng tôi nghĩ có khả năng sự phân tách bởi lần xuất hiện đầu tiên là có thể với regex và lookahead mà không cần chuẩn bị trước.
Không có regex nào sẽ tìm thấy mẫu * thường xuyên nhất *. Bạn sẽ phải dựa vào các phương tiện ngôn ngữ khác. –