我有一个字符串:
s = '96 ST MARY ST'
现在,'ST'
的第一个出现是 Saint ,第二个出现是 Street ,即圣玛丽街。
我想用Saint替换第一个ST
,用Street替换第二个ST
。为此,我尝试使用find()
和rfind()
:
# index of ST
ind = s.find('ST')
s[ind:(ind+2)] = 'Saint'
# index of last ST
ind2 = s.rfind('ST')
s[ind2:(ind2+2)] = 'Street'
TypeError: 'str' object does not support item assignment
我不知道该如何解决。
有没有办法以某种方式提取这些子字符串并替换它们?
答案 0 :(得分:1)
您可以将re.sub
及其count参数用于第一个替换对象:
s = '96 ST MARY ST'
print(s)
out = re.sub(r'\bST\b', 'Saint', s, 1)
print(out)
out = re.sub(r'\bST\b', 'Street', s)
print(out)
此打印:
96 ST MARY ST
96 Saint MARY ST
96 Street MARY Street
但是,尽管以上内容恰好适用于您的确切样本输入,但是在很多情况下,这将失败。它假定Saint
在Street
之前,并且可能并非总是如此,也不总是只有两次出现ST
。
答案 1 :(得分:1)
两次替换:
s = s.replace("ST", "Saint", 1).replace("ST", "Street", 1)
答案 2 :(得分:0)
一种简单的方法,假设“ ST”总是出现2次:
p1, p2, _ = s.split('ST')
res = f"{p1}Saint{p2}Street"
如果您输入的字符串碰巧更复杂,则应使用regex(如Tim Biegeleisen所建议的那样)