Hướng dẫn python remove last occurrence from string - python xóa lần xuất hiện cuối cùng khỏi chuỗi

Có một cách nhanh chóng trong Python để thay thế các chuỗi, nhưng thay vì bắt đầu từ đầu như

>>> 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'
1, bắt đầu từ cuối? Ví dụ:

>>> 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>'

Hướng dẫn python remove last occurrence from string - python xóa lần xuất hiện cuối cùng khỏi chuỗi

Cœur

358K24 Huy hiệu vàng189 Huy hiệu bạc258 Huy hiệu Đồng24 gold badges189 silver badges258 bronze badges

Đã hỏi ngày 31 tháng 3 năm 2010 lúc 20:07Mar 31, 2010 at 20:07

Hướng dẫn python remove last occurrence from string - python xóa lần xuất hiện cuối cùng khỏi chuỗi

2

>>> 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'

Đã trả lời ngày 31 tháng 3 năm 2010 lúc 20:29Mar 31, 2010 at 20:29

mg.mg.mg.

7.6471 Huy hiệu vàng25 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge25 silver badges30 bronze badges

2

Đây là một liner:one-liner:

result = new.join(s.rsplit(old, maxreplace))

Trả về một bản sao của chuỗi s với tất cả các lần xuất hiện của phần phụ cũ được thay thế bằng mới. Các lần xuất hiện Maxreplace đầu tiên được thay thế.

và một ví dụ đầy đủ về việc sử dụng này:example of this in use:

s = 'mississipi'
old = 'iss'
new = 'XXX'
maxreplace = 1

result = new.join(s.rsplit(old, maxreplace))
>>> result
'missXXXipi'

Đã trả lời ngày 28 tháng 11 năm 2019 lúc 5:13Nov 28, 2019 at 5:13

Phil Bphil bPhil B

5.3097 Huy hiệu vàng39 Huy hiệu bạc57 Huy hiệu Đồng7 gold badges39 silver badges57 bronze badges

2

Tôi sẽ không giả vờ rằng đây là cách hiệu quả nhất để thực hiện nó, nhưng đó là một cách đơn giản. Nó đảo ngược tất cả các chuỗi trong câu hỏi, thực hiện một sự thay thế thông thường bằng cách sử dụng

>>> 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'
2 trên các chuỗi đảo ngược, sau đó đảo ngược kết quả trở lại đúng cách:

>>> 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>'

Đã trả lời ngày 31 tháng 3 năm 2010 lúc 20:16Mar 31, 2010 at 20:16

Mark Byersmark ByersMark Byers

787K188 Huy hiệu vàng1553 Huy hiệu bạc1440 Huy hiệu đồng188 gold badges1553 silver badges1440 bronze badges

Chỉ cần đảo ngược chuỗi, thay thế lần xuất hiện đầu tiên và đảo ngược lại:

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)

Output:

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.

Đã trả lời ngày 1 tháng 3 năm 2019 lúc 13:37Mar 1, 2019 at 13:37

JoejoeJoe

11.1K27 Huy hiệu vàng97 Huy hiệu bạc173 Huy hiệu đồng27 gold badges97 silver badges173 bronze badges

1

Nếu bạn biết rằng chuỗi 'cũ' không chứa bất kỳ ký tự đặc biệt nào, bạn có thể làm điều đó với 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>'

Đã trả lời ngày 20 tháng 9 năm 2012 lúc 16:57Sep 20, 2012 at 16:57

Dave Kirbydave KirbyDave Kirby

25.1k5 Huy hiệu vàng65 Huy hiệu bạc82 Huy hiệu Đồng5 gold badges65 silver badges82 bronze badges

Đây là một giải pháp đệ quy cho vấn đề:

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

Đã trả lời ngày 31 tháng 3 năm 2010 lúc 21:26Mar 31, 2010 at 21:26

Naivnomorenaivnomorenaivnomore

1.2517 huy hiệu bạc13 huy hiệu đồng7 silver badges13 bronze badges

Thử cái này:

def replace_last(string, old, new):
    old_idx = string.rfind(old)
    return string[:old_idx] + new + string[old_idx+len(old):]

Tương tự, bạn có thể thay thế lần xuất hiện đầu tiên bằng cách thay thế String.rfind () bằng String.Find ().string.rfind() with string.find().

Tôi hy vọng nó sẽ giúp.

Đã trả lời ngày 19 tháng 8 lúc 7:06Aug 19 at 7:06

Hướng dẫn python remove last occurrence from string - python xóa lần xuất hiện cuối cùng khỏi chuỗi

NominomiNomi

1252 Huy hiệu bạc13 Huy hiệu Đồng2 silver badges13 bronze badges

Nếu bạn có một danh sách các chuỗi, bạn có thể sử dụng danh sách hiểu và cắt chuỗi trong một lớp lót để bao gồm toàn bộ danh sách .. Không cần sử dụng hàm;

>>> 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'
0

Tôi sử dụng Ifelse để giữ các mục trong danh sách không đáp ứng các tiêu chí để thay thế nếu không danh sách của bạn sẽ chỉ là các mục đáp ứng các tiêu chí.if else to keep the items in the list that don't meet the criteria for replacement otherwise your list would just be the items that do meet the criteria.

Đã trả lời ngày 1 tháng 9 lúc 18:08Sep 1 at 18:08

Ehambrighthehambrightehambright

1.29117 Huy hiệu bạc26 Huy hiệu đồng17 silver badges26 bronze badges