ปัญหานี้สามารถแก้ไขได้โดยการย้อนกลับสตริง ย้อนกลับสตริงที่จะแทนที่ แทนที่สตริงด้วยการย้อนกลับของสตริงที่จะแทนที่ด้วย และสุดท้ายย้อนกลับสตริงเพื่อให้ได้ผลลัพธ์
คุณสามารถย้อนกลับสตริงได้โดยใช้สัญกรณ์สไลซ์อย่างง่าย - [::-1] ในการแทนที่สตริง คุณสามารถใช้ str.replace(เก่า ใหม่ นับ) ตัวอย่างเช่น
def rreplace(s, old, new): return (s[::-1].replace(old[::-1],new[::-1], 1))[::-1] rreplace('Helloworld, hello world, hello world', 'hello', 'hi')
สิ่งนี้จะให้ผลลัพธ์:
'Hello world,hello world, hi world'
อีกวิธีหนึ่งที่คุณสามารถทำได้คือการย้อนกลับการแยกสตริงหนึ่งครั้งบนสตริงเก่าและเข้าร่วมรายการด้วยสตริงใหม่ ตัวอย่างเช่น
def rreplace(s, old, new): li = s.rsplit(old, 1) #Split only once return new.join(li) rreplace('Helloworld, hello world, hello world', 'hello', 'hi')
สิ่งนี้จะให้ผลลัพธ์:
'Hello world,hello world, hi world'