Czy w Pythonie istnieje szybki sposób na zastąpienie ciągów, ale zamiast zaczynać od początku, jak to się replace
dzieje, zaczynając od końca? Na przykład:
>>> def rreplace(old, new, occurrence)
>>> ... # Code to replace the last occurrences of old by new
>>> '<div><div>Hello</div></div>'.rreplace('</div>','</bad>',1)
>>> '<div><div>Hello</div></bad>'
Odpowiedzi:
źródło
.replace
Metoda ta trzecia opcjonalny argument „licznik”, który informuje go zastąpić n pierwszych zdarzeń. Czy nie byłoby to intuicyjne, gdyby wymagało to -1, ale niestety nie, więc potrzebujemy Twojego rozwiązania.Nie zamierzam udawać, że jest to najefektywniejszy sposób, ale jest to prosty sposób. Odwraca wszystkie odnośne ciągi, wykonuje zwykłą zamianę, używając
str.replace
odwróconych ciągów, a następnie odwraca wynik z powrotem we właściwą stronę:źródło
Oto jedna linijka:
i pełny przykład tego w użyciu:
źródło
line = "".join(line.rsplit(",", 1))
zachowując później spację dopełnienia.Po prostu odwróć ciąg, zamień pierwsze wystąpienie i odwróć je ponownie:
Wynik:
źródło
Jeśli wiesz, że „stary” ciąg nie zawiera żadnych znaków specjalnych, możesz to zrobić za pomocą wyrażenia regularnego:
źródło
Oto rekurencyjne rozwiązanie problemu:
źródło