Замена строки на питоне

Я хочу изменить первый / E после / V на X и второй / E на Y и третий / E на Z в текстовых файлах.

/ V может сопровождаться словом, отличным от / E

Количество / Е составляет от 1 до 3.

Например, следующая строка

АА / В + ВВ / Е +CC/ Е + ДД / Е

следует изменить следующим образом:

АА /V+X+Y+Z,

Это мой код, и результаты верны. Но я думаю, что это неэффективно.

s1 = '1/VV+12/ER+123/EED+1234/EC'
s2 = 'GG/K+AA/V+BB/E+FF/E+CC/E'

for s in [s1, s2]:
    morphs = s.split('+')

    lst = []
    l = ['X','Y','Z']
    i = 0
    flag = False
    while i < len(morphs):
        lst.append(morphs[i])
        if '/V' in morphs[i]:
            for j in range(1, len(morphs)-i):
                if '/E' in morphs[i+j]:
                    lst.append(l.pop(0))
                    flag = True
                else:
                    lst.append(morphs[i+j])
                    i = i+j
                    flag = False
                    break
            if flag:
                break
        i+=1
    print('+'.join(lst))

Результаты:

1 / VV + X + Y + Z,

GG/ К + АА /V+X+Y+Z,

2 ответа

Вы можете легко реализовать это в Python:

def format_string(s):
    start_index = s.index('/V')
    change_to = ['X', 'Y', 'Z']
    for c in change_to:
        if '/E' in s:
            target_index = s.index('/E')
            if target_index>start_index:
                s = s[:target_index-2] + c + s[target_index + 2:]
    return s

s1 = 'AA/V+BB/E+CC/E+DD/E'
s2 = 'AA/V+BB/E+FF/F'
expected1 = 'AA/V+X+Y+Z'
expected2 = 'AA/V+X+FF/F'

print format_string(s1)==expected1
print format_string(s2)==expected2

Простой способ сделать то же самое - получить индексы \v и все,\e и затем просто проверьте, больше ли индексы e, чем у V. Если это так, то замените E соответственно, как вы сказали, что в вашем тексте может быть только 1,2 или 3 E...

Другие вопросы по тегам