是否可以多次替换字符串中的单个字符?
输入:
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"
。
答案 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
的出现次数。