Przede wszystkim pytanie jest oznaczone Python
i regex
, ale tak naprawdę nie jest z nimi związany - odpowiedź może być na wysokim poziomie.Podziel ciąg znaków przez pierwsze wystąpienie z zestawu ograniczników z python i regex
W tej chwili dzielę łańcuch z wieloma ogranicznikami na następujący wzór. Istnieje rzeczywiście bardziej wytyczenie wzory i są bardziej złożone, ale trzymajmy go prosty i ograniczyć je do 2 znaków - #
i *
:
parts = re.split('#|*', string)
których takie podejście ciąg aaa#bbb*ccc#ddd
jest podzielony na 4 podciągi aaa
, bbb
, ccc
, ddd
. Ale wymagane jest podzielenie przez separator, który występuje jako pierwszy w łańcuchu lub przez ogranicznik, który jest najczęściej w ciągu znaków. aaa#bbb*ccc#ddd
należy podzielić na aaa
, bbb*ccc
, ddd
i aaa*bbb#ccc*ddd
należy podzielić na aaa
, bbb#ccc
, ddd
.
Znam prosty sposób, aby to osiągnąć - znaleźć, co separator występuje jako pierwszy lub jest najczęstszy w ciągu, a następnie podzielić go tym pojedynczym ogranicznikiem. Ale metoda musi być wydajna i zastanawiam się, czy można to osiągnąć za pomocą pojedynczego wyrażenia wyrażenia regularnego. Pytanie dotyczy głównie podziału z pierwszym pojawieniem się zestawu ograniczników - dla najczęstszych przypadków ograniczników prawie na pewno konieczne będzie obliczenie liczby wystąpień z góry.
Aktualizacja:
Pytanie nie prosi, aby podzielić przez pierwszego wystąpienia lub najczęstszego separatora jednocześnie - każda z tych metod indywidualnie będzie wystarczająca. Rozumiem, że dzielenie przez najczęstsze separatory nie jest możliwe w przypadku wyrażenia regularnego bez wstępnego określenia separatora, ale myślę, że jest szansa, że podział po pierwszym wystąpieniu jest możliwy z regex i uprzedzeniem bez wcześniejszego przygotowania.
Żaden regex nie znajdzie * najczęstszego * wzoru. Będziesz musiał polegać na innych środkach językowych. –