如何在python中替换文本字符串的最后一个特定实例?

时间:2012-09-01 15:11:27

标签: python python-3.x

在像everybody! eat! eat eat eat!这样的句子中,我只需要替换最后一个!,而不是其他人。

q = raw_input("English: ")
qq = str(q.isspace())
e = ''
while q != e:
    q =q.replace("i", "ee")
    q =q.replace("!", ". bork bork bork!")
    q =q.replace("th","z")
    print q
    q = raw_input("English: ")

4 个答案:

答案 0 :(得分:3)

s = "everybody! eat! eat eat eat!"  
s[::-1].replace("!", "?", 1)[::-1]

结果

everybody! eat! eat eat eat?

修改

也适用于文字:

s[::-1].replace("tae", "knird", 1)[::-1]
# => 'everybody! eat! eat eat drink!'

编辑2:

我认为你明白了这个想法:

s[::-1].replace("eat"[::-1], "drink"[::-1], 1)[::-1]
# => 'everybody! eat! eat eat drink!'

答案 1 :(得分:2)

<强>更新

使用rstrip()

s = "everybody! eat! eat eat eat!"  
s[:-1]+s[-1].rstrip('!')+'. bork bork bork!' # updated

给出:

'everybody! eat! eat eat eat. bork bork bork!'

假设!之后没有任何内容(两种方式都没有指定)。 rstrip()将吞噬尾随!并将替换文本连接到字符串的末尾。

更新会阻止多个尾随!!!所有条带化,使用切片表示法我们只删除最后一个字符!

以前的解决方案

 s.rstrip('!')+'. bork bork bork!' 

会吞噬多个尾随!!!

答案 2 :(得分:0)

最简单的方法是使用正则表达式:

s = 'everybody! eat! eat eat eat!'

import re
print re.sub(r'!([^!]*)$', r'?\1', s)

仅使用字符串函数:

p = s.rpartition('!')
if p[1]:
    s = p[0] + '?' + p[2]
print s

答案 3 :(得分:0)

字符串方法replace采用可选参数,让您决定要替换的次数。如您想要替换最后一个,只需反转字符串

即可
>>> s = "hey! hey! hey! hey!"
>>> s[::-1].replace("!","?",1)[::-1]
'hey! hey! hey! hey?'

请注意,仅当您替换一个单个字符时才有效...