Удаление части строки между индексами - PullRequest
0 голосов
/ 16 марта 2020

Мне нужно написать функцию, которая при задании строки находит первое появление подстроки «not» и «bad». Если «плохое» следует за «не», оно заменяет всю подстроку «не» ... «плохое» на «хорошее». Например: «Этот ужин не так уж и плох!» Урожай: Этот ужин хорош! Я пробовал:

def not_bad(s):
    sub1='not'
    sub2='bad'
    if s.find(sub1) < s.find(sub2):
        s = s[0:int(s.find(sub1))]
        s= s + 'good'
        return s
    else:
        return s

, но в конце не появляется восклицательный знак.

Ответы [ 4 ]

0 голосов
/ 17 марта 2020

Пожалуйста, проверьте это.

def not_bad(main_str):
    sub1='not'
    sub2='bad'
    if main_str.find(sub1) < main_str.find(sub2):
        main_str = main_str[0:int(main_str.find(sub1))] + 'good' + main_str[int(main_str.find(sub2)) + len(sub2):]
        return main_str
    else:
        return main_str


output_str = not_bad('This dinner is not that bad!')
print(output_str)

Вывод:

This dinner is good!
0 голосов
/ 16 марта 2020

Я не использовал регулярные выражения, потому что я действительно не знаю, как. но мое решение:

def not_bad(s):
    sub1='not'
    sub2='bad'
    temp = None
    if s[len(s)-1] == "!": #-> this checks if there is "!"
        temp = s[len(s)-1]
    if s.find(sub1) or s.find(sub2):
        s = s[:int(s.find(sub1))]
        s += 'good'
        if temp:
            s += temp
        return s
    else:
        return s
0 голосов
/ 16 марта 2020

@ ch3ster правильно, но это будет всего лишь одно слово. Для любых других символов вы должны попробовать это

import re

string1="the dinner is not nice 27 that bad"
print(re.sub(r"not[a-zA-Z _0-9]*bad","good",string1))

Выходы

the dinner is good
0 голосов
/ 16 марта 2020

Вы можете использовать re здесь.

import re
s='This dinner is not that bad!'
re.sub(r'not \w+ bad','good',s)
# 'This dinner is good!'

\w+ - соответствует любому символу слова (равен [a-zA-Z0-9_])

...