Я использую Python 2.6 и хочу заменить каждый экземпляр определенных начальных символов (.
, _
и $
в моем случае) в строке другим символом или строкой.Поскольку в моем случае строка замены та же самая, я придумал следующее:
def replaceLeadingCharacters(string, old, new = ''):
t = string.lstrip(old)
return new * (len(string) - len(t)) + t
, который, кажется, работает нормально:
>>> replaceLeadingCharacters('._.!$XXX$._', '._$', 'Y')
'YYY!$XXX$._'
Есть лилучший (более простой или эффективный) способ достижения того же эффекта в Python?
Есть ли способ добиться этого эффекта с помощью строки вместо символов?Что-то вроде str.replace (), которое останавливается, когда во входной строке появляется что-то отличное от заменяемой строки?Прямо сейчас я пришел к этому:
def replaceLeadingString(string, old, new = ''):
n = 0
o = 0
s = len(old)
while string.startswith(old, o):
n += 1
o += s
return new * n + string[o:]
Я надеюсь, что есть способ сделать это без явного цикла
РЕДАКТИРОВАТЬ:
Существует довольно много ответов с использованием модуля re
.У меня есть пара вопросов / проблем с ним:
Разве это не значительно медленнее, чем str
методы, используемые в качестве замены для них?
Есть ли простой способ правильно заключать в кавычки / экранировать строки, которые будут использоваться в регулярном выражении?Например, если бы я хотел использовать re
для replaceLeadingCharacters
, как бы я гарантировал, что содержимое переменной old
не испортит все в ^[old]+
?Я предпочел бы иметь функцию «черного ящика», которая не требует от пользователей обращать внимание на список символов, которые они предоставляют.