用不同的单词替换相等的子字符串

时间:2019-09-19 14:15:01

标签: python replace

我有一个字符串:

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

我不知道该如何解决。

有没有办法以某种方式提取这些子字符串并替换它们?

3 个答案:

答案 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

但是,尽管以上内容恰好适用于您的确切样本输入,但是在很多情况下,这将失败。它假定SaintStreet之前,并且可能并非总是如此,也不总是只有两次出现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所建议的那样)