Замена в строке двойного пробела на одинарный
У меня есть строка:
str = 'A l a m a k o t a'
Как видно в строке, между буквами одного слова у меня один пробел, между словами два.
Хочу преобразовать строку в :
'Ala ma kota'
Пытался решить так, но потерпел крах:
Cначала меняю двойные пробелы на '``':
for i in range(len(str)-1):
if str[i] == ' ' and str[i+1]== ' ':
comment.replace('str[i]', '`')
comment.replace('str[i + 1]', '`')
Потом удаляю одинарные:
str.replace(' ', '')
И в конце заменяю '``' на пробел:
str.replace('``',' ')
Но вся эта конструкция не работает. Как можно решить данную задачу?
Ответы (4 шт):
Не называйте переменные именами встроенных типов!
Можно воспользоваться регулярными выражениями, заменив первый пробел ни на что и сохранив второй
import re
regex = r"\s(\s)?"
test_str = "'A l a m a k o t a'"
subst = "\\1"
print(re.sub(regex, subst, test_str)) # 'Ala ma kota'
а вот так можно заменить любое кол-во пробелов, больше одного, на один пробел
regex = r"\s((\s)(\s+)?)?"
subst = "\\2"
result = re.sub(regex, subst, test_str)
Вариант без использования регулярных выражений:
s = "A l a m a k o t a"
res = s.replace(" ", "~!~").replace(" ", "").replace("~!~", " ")
print(res)
# Ala ma kota
Можно использовать встроенный метод join()
string = 'A l a m a k o t a'
f = string.split(' ')
print(' '.join([''.join(res.split()) for res in f])
Если задача учебная, то можно перебрать в цикле все символы, копируя их в новую строку и пропуская пробелы при встрече - когда попадается пробел, просто переходим к следующему символу, не записывая этот пробел в новую строку. Таким образом одиночные пробелы игнорируются, "вторые" пробелы попадают в результат.
string = 'A l a m a k o t a'
new_string = ''
itr = iter(string)
try:
while True:
char = next(itr)
if char == ' ':
char = next(itr)
new_string += char
except StopIteration:
print(new_string)
Output
Ala ma kota