Как правильно реализовать удаление из строки определенных слов

Задача: Удалить из строки "sos" (или добавить в новую но без нее), при это буква "o" может повторяться по многу раз. Реализовал это так (цикл for):

sl = ''
#Цикл
if s == 1:
       if line[i] == 'o':
           continue
       elif line[i-1] == 'o' and line[i] == 's':
           continue
if line[i] == 's' and line[i+1] == 'o' and line[i+2] == 'o' or line[i] == 's' and line[i+1] == 'o' and line[i+2] == 's':
       s = 1
else:
       sl += line[i]

Как реализовать это по-другому? (Про то что работает не для всех проверок я знаю)


Ответы (2 шт):

Автор решения: w4sQ

Программа удаляет слово "sos" с любым количеством буквы "o"

text = "word soooooos help main python".split()
for word in text:
    if word.startswith("s") and word.endswith("s"):
        w = word[1:len(word)-1].replace("o", "")
        if w == "":
            text.remove(word)
    text1 = " ".join(map(str, text))
print(text1)
→ Ссылка
Автор решения: Сергей

Можно так "в лоб" сделать (не особо изящно, но просто и без дополнительных модулей:-), так как для регулярных выражений модуль re понадобится. Большие буквы считаются допустимыми, т.е. SOS пройдет. Но доп.проверку встроить не сложно.

str_a='sosтест успешен soooooos'
sl = ''
s_buf=''
fl1 = False
for i in str_a:
    # Первая 's'
    if i == 's' and not fl1:
        s_buf = i
        fl1 = True
    # 'o' после 's'
    elif i == 'o' and fl1:
        s_buf += i
    # Последняя 's'
    elif i == 's' and fl1:
        s_buf = ''
        fl1 = False
    # Всё остальное
    else:
        sl = sl + s_buf + i
        fl1 = False
print (sl)
→ Ссылка