Замена повторяющихся символов в строках в Python 3.1 - PullRequest
2 голосов
/ 24 марта 2011

Можно ли заменить один символ внутри строки , который встречается много раз?

Введите:

Sentence=("This is an Example. Thxs code is not what I'm having problems with.") #Example input
                                 ^
Sentence=("This is an Example. This code is not what I'm having problems with.") #Desired output

Заменить 'x' в "Thxs" на i, не заменяя x in "Example".

Ответы [ 3 ]

4 голосов
/ 24 марта 2011

Вы можете сделать это, включив некоторый контекст:

s = s.replace("Thxs", "This")

В качестве альтернативы вы можете сохранить список слов, которые вы не хотите заменить:

whitelist = ['example', 'explanation']

def replace_except_whitelist(m):
    s = m.group()
    if s in whitelist: return s
    else: return s.replace('x', 'i')

s = 'Thxs example'
result = re.sub("\w+", replace_except_whitelist, s)
print(result)

Выход:

This example
0 голосов
/ 24 марта 2011

Если вы знаете, хотите ли вы заменить первое вхождение x, или второе, или третье, или последнее, вы можете объединить str.find (или str.rfind, если хотите начать с конца строки) с нарезкой и str.replace, подающей символ, который вы хотите заменить, в первый метод столько раз, сколько необходимо, чтобы получить позицию непосредственно перед символом, который вы хотите заменить (для конкретного предложения, которое вы предлагаете, только один), затем разделите строку на две части и замените только один экземпляр во втором фрагменте.

Пример стоит тысячи слов, или они так говорят. Далее я предполагаю, что вы хотите заменить (n + 1) -е вхождение символа.

>>> s = "This is an Example. Thxs code is not what I'm having problems with."
>>> n = 1
>>> pos = 0
>>> for i in range(n):
>>>     pos = s.find('x', pos) + 1
...
>>> s[:pos] + s[pos:].replace('x', 'i', 1)
"This is an Example. This code is not what I'm having problems with."

Обратите внимание, что вам нужно добавить смещение к pos, в противном случае вы замените вхождение x, которое вы только что нашли.

0 голосов
/ 24 марта 2011

Конечно, но вам нужно создать новую строку из частей, которые вы хотите:

>>> s = "This is an Example. Thxs code is not what I'm having problems with."
>>> s[22]
'x'
>>> s[:22] + "i" + s[23:]
"This is an Example. This code is not what I'm having problems with."

Для получения информации об используемой здесь нотации см. хороший праймер для нотации срезов питона .

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