我想在Python中做一個字符串替換,但只做第一個從右到左的實例。在一個理想的世界,我想有:在Python中從右到左的字符串替換?
myStr = "mississippi"
print myStr.rreplace("iss","XXX",1)
> missXXXippi
什麼是這樣做的最佳方式,因爲rreplace
不存在?
我想在Python中做一個字符串替換,但只做第一個從右到左的實例。在一個理想的世界,我想有:在Python中從右到左的字符串替換?
myStr = "mississippi"
print myStr.rreplace("iss","XXX",1)
> missXXXippi
什麼是這樣做的最佳方式,因爲rreplace
不存在?
這是一種骯髒的黑客,但你可以扭轉字符串,並用反向字符串替換。
"mississippi".reverse().replace('iss'.reverse(), 'XXX'.reverse(),1).reverse()
字符串沒有'reverse()'方法。 – 2012-03-30 13:04:29
你可能逆轉,像這樣的字符串:
myStr[::-1]
更換隻需添加.replace
:
print myStr[::-1].replace("iss","XXX",1)
但是現在你的字符串向後,所以重新扭轉這種局面:
myStr[::-1].replace("iss","XXX",1)[::-1]
,你就完成了。 如果你的替換字符串是靜態的,只需在文件中反轉它們以減少開銷。 如果沒有,同樣的技巧將起作用。
myStr[::-1].replace("iss"[::-1],"XXX"[::-1],1)[::-1]
你忘了翻轉匹配的文本和替換文本 – sleeplessnerd 2012-03-30 13:09:37
不,我最後說了如果你想讓它們顛倒過來該怎麼做。 – Serdalis 2012-03-30 13:27:08
>>> re.sub(r'(.*)iss',r'\1XXX',myStr)
'missXXXippi'
正則表達式引擎cosumes所有的字符串,然後開始回溯,直到iss
被發現。然後它將所找到的字符串替換爲所需的模式。
一些速度tests
將溶液用[::-1]
原來是更快。
re
的解決方案對於長字符串(超過100萬個符號)的速度更快。
def rreplace(s, old, new):
try:
place = s.rindex(old)
return ''.join((s[:place],new,s[place+len(old):]))
except ValueError:
return s
相對的影響:http://stackoverflow.com/q/2556108/989121 – georg 2012-03-30 13:11:49