Apakah ada cara cepat dalam Python untuk mengganti string tetapi, alih-alih memulai dari awal seperti replace
halnya, memulai dari akhir? Sebagai contoh:
>>> 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>'
Jawaban:
>>> def rreplace(s, old, new, occurrence): ... li = s.rsplit(old, occurrence) ... return new.join(li) ... >>> s '1232425' >>> rreplace(s, '2', ' ', 2) '123 4 5' >>> rreplace(s, '2', ' ', 3) '1 3 4 5' >>> rreplace(s, '2', ' ', 4) '1 3 4 5' >>> rreplace(s, '2', ' ', 0) '1232425'
sumber
.replace
Metode mengambil sepertiga opsional argumen 'count' yang mengatakan itu untuk menggantikan n kejadian pertama. Bukankah akan intuitif jika itu akan mengambil -1 suka tetapi sayangnya tidak, jadi kami membutuhkan solusi Anda.Saya tidak akan berpura-pura bahwa ini adalah cara paling efisien untuk melakukannya, tetapi ini cara yang sederhana. Ini membalikkan semua string yang dimaksud, melakukan penggantian biasa menggunakan
str.replace
string terbalik, kemudian membalikkan hasilnya kembali ke arah yang benar:>>> def rreplace(s, old, new, count): ... return (s[::-1].replace(old[::-1], new[::-1], count))[::-1] ... >>> rreplace('<div><div>Hello</div></div>', '</div>', '</bad>', 1) '<div><div>Hello</div></bad>'
sumber
Ini satu baris:
dan contoh lengkap penggunaan ini:
s = 'mississipi' old = 'iss' new = 'XXX' maxreplace = 1 result = new.join(s.rsplit(old, maxreplace)) >>> result 'missXXXipi'
sumber
line = "".join(line.rsplit(",", 1))
sambil tetap mengisi spasi setelahnya.Balikkan saja string, ganti kemunculan pertama dan balikkan lagi:
mystr = "Remove last occurrence of a BAD word. This is a last BAD word." removal = "BAD" reverse_removal = removal[::-1] replacement = "GOOD" reverse_replacement = replacement[::-1] newstr = mystr[::-1].replace(reverse_removal, reverse_replacement, 1)[::-1] print ("mystr:", mystr) print ("newstr:", newstr)
Keluaran:
mystr: Remove last occurence of a BAD word. This is a last BAD word. newstr: Remove last occurence of a BAD word. This is a last GOOD word.
sumber
Jika Anda tahu bahwa string 'lama' tidak berisi karakter khusus, Anda dapat melakukannya dengan regex:
In [44]: s = '<div><div>Hello</div></div>' In [45]: import re In [46]: re.sub(r'(.*)</div>', r'\1</bad>', s) Out[46]: '<div><div>Hello</div></bad>'
sumber
Berikut ini solusi rekursif untuk masalah tersebut:
def rreplace(s, old, new, occurence = 1): if occurence == 0: return s left, found, right = s.rpartition(old) if found == "": return right else: return rreplace(left, old, new, occurence - 1) + new + right
sumber