Python中从右到左的字符串替换?

fre*_*ley 50 python

我想在Python中进行字符串替换,但只做第一个从右到左的实例.在一个理想的世界里我会:

myStr = "mississippi"
print myStr.rreplace("iss","XXX",1)

> missXXXippi
Run Code Online (Sandbox Code Playgroud)

rreplace如果不存在,最好的方法是什么?

Ste*_*lie 79

rsplit并可join用于模拟一个人的影响rreplace

>>> 'XXX'.join('mississippi'.rsplit('iss', 1))
'missXXXippi'
Run Code Online (Sandbox Code Playgroud)

  • +1表示随后的程序员可以理解的解决方案. (6认同)
  • @jave.web 或从 3.9 `yourFilepath.removesuffix('.py') + '.log'` 开始 (2认同)

eum*_*iro 22

>>> myStr[::-1].replace("iss"[::-1], "XXX"[::-1], 1)[::-1]
'missXXXippi'
Run Code Online (Sandbox Code Playgroud)

  • 那是*不*新手友好... :) (12认同)
  • 请永远不要在您共享或希望其他人阅读的任何代码中使用这样的代码! (2认同)

ovg*_*vin 15

>>> re.sub(r'(.*)iss',r'\1XXX',myStr)
'missXXXippi'
Run Code Online (Sandbox Code Playgroud)

正则表达式引擎会消耗所有字符串,然后开始回溯直到iss找到.然后它用所需的模式替换找到的字符串.


一些速度测试

[::-1]事实证明,解决方案更快.

re对于长字符串(长度超过100万个符号),解决方案只有更快.


Ser*_*lis 9

你可以像这样反转一个字符串:

myStr[::-1]
Run Code Online (Sandbox Code Playgroud)

替换只需添加.replace:

print myStr[::-1].replace("iss","XXX",1)
Run Code Online (Sandbox Code Playgroud)

但是现在你的字符串是向后的,所以重新反转它:

myStr[::-1].replace("iss","XXX",1)[::-1]
Run Code Online (Sandbox Code Playgroud)

你完成了 如果您的替换字符串是静态的,只需在文件中将它们反转以减少开销 如果没有,同样的技巧将起作用.

myStr[::-1].replace("iss"[::-1],"XXX"[::-1],1)[::-1]
Run Code Online (Sandbox Code Playgroud)

  • 你忘了翻转匹配的文本和替换文本 (2认同)
  • 不,我最后说了如果您想让他们逆转该怎么办。 (2认同)