Реализовать функцию Python replace () без использования регулярных выражений - PullRequest
3 голосов
/ 15 ноября 2011

Я пытаюсь переписать эквивалент функции python replace () без использования regexp.Используя этот код, мне удалось заставить его работать с одиночными символами, но не с более чем одним символом:

def Replacer(self, find_char, replace_char):
    s = []
    for char in self.base_string:
        if char == find_char:
            char = replace_char
        #print char
        s.append(char)
    s = ''.join(s)

my_string.Replacer('a','E')

У кого-нибудь есть указания, как заставить эту работу работать с более чем одним символом?пример:

my_string.Replacer('kl', 'lll') 

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011

Насколько умным ты пытаешься быть?

def Replacer(self, find, replace):
    return(replace.join(self.split(find)))

>>> Replacer('adding to dingoes gives diamonds','di','omg')
'adomgng to omgngoes gives omgamonds'
2 голосов
/ 15 ноября 2011

Вот метод, который должен быть довольно эффективным:

def replacer(self, old, new):
    return ''.join(self._replacer(old, new))

def _replacer(self, old, new):
    oldlen = len(old)
    i = 0
    idx = self.base_string.find(old)
    while idx != -1:
        yield self.base_string[i:idx]
        yield new
        i = idx + oldlen
        idx = self.base_string.find(old, i)
    yield self.base_string[i:]
0 голосов
/ 15 ноября 2011

Давайте попробуем с некоторыми кусочками (но вы действительно должны рассмотреть использование встроенного метода python):

class ReplacableString:
    def __init__(self, base_string):
        self.base_string =base_string

    def replacer(self, to_replace, replacer):
        for i in xrange(len(self.base_string)):
            if to_replace == self.base_string[i:i+len(to_replace)]:
                self.base_string = self.base_string[:i] + replacer + self.base_string[i+len(to_replace):]

    def __str__(self):
        return str(self.base_string)


test_str = ReplacableString("This is eth string")
test_str.replacer("eth", "the")
print test_str

>>> This is the string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...