在Python 3.1中替换字符串中的重复字符

时间:2011-03-23 22:12:33

标签: python string variables replace

是否可以多次替换字符串中的单个字符?

输入:

Sentence=("This is an Example. Thxs code is not what I'm having problems with.") #Example input
                                 ^
Sentence=("This is an Example. This code is not what I'm having problems with.") #Desired output

"Thxs"中的'x'替换为i,而不替换x中的"Example"

3 个答案:

答案 0 :(得分:4)

您可以通过包含一些上下文来实现:

s = s.replace("Thxs", "This")

或者,您可以保留希望替换的单词列表:

whitelist = ['example', 'explanation']

def replace_except_whitelist(m):
    s = m.group()
    if s in whitelist: return s
    else: return s.replace('x', 'i')

s = 'Thxs example'
result = re.sub("\w+", replace_except_whitelist, s)
print(result)

输出:

This example

答案 1 :(得分:0)

当然,但你必须从你想要的部分中建立一个新的字符串:

>>> s = "This is an Example. Thxs code is not what I'm having problems with."
>>> s[22]
'x'
>>> s[:22] + "i" + s[23:]
"This is an Example. This code is not what I'm having problems with."

有关此处使用的符号的信息,请参阅good primer for python slice notation

答案 2 :(得分:0)

如果您知道是否要替换第一次出现的x,或者第二次出现,或者替换第二次出现,或者是最后一次出现,则可以合并str.find(或str.rfind希望从字符串的结尾开始,使用切片和str.replace,将要替换的字符输入到第一个方法,在需要替换的字符之前获取位置需要多次(对于你建议的特定句子,只有一个),然后将字符串切成两半,并在第二个切片中只替换一个匹配项。

他们说,一个例子值得千言万语。在下文中,我假设您要替换(n + 1)字符出现。

>>> s = "This is an Example. Thxs code is not what I'm having problems with."
>>> n = 1
>>> pos = 0
>>> for i in range(n):
>>>     pos = s.find('x', pos) + 1
...
>>> s[:pos] + s[pos:].replace('x', 'i', 1)
"This is an Example. This code is not what I'm having problems with."

请注意,您需要向pos添加偏移量,否则您将替换刚刚找到的x的出现次数。