Python. Поиск и замена подстрок в строке
Смысл заключается в том что к примеру имеется строка:
aaabbcdecvvv
Имеются подстроки:
aa = 1
aaa = 2
bb = 3
b = 4
c = 5
cde = 6
vvv = 7
Необходимо заменять содержимое строки на подстроки с начала и по максимальному совпадению.
Следовательно как результат будет 2bbcdecvvv -> 23cdecvvv -> 236cvvv -> 2365vvv -> 23657
Метод который знаю, а именно replace не подходит, т.к. он вырывает не всегда из начала
Ответы (3 шт):
Автор решения: Alex Zab
→ Ссылка
Пжлст)
stroka = 'aaabbcdecvvv'
for x in stroka:
if 'aaa' in stroka:
stroka = stroka.replace('aaa', '2')
elif 'aa' in stroka:
stroka = stroka.replace('aa', '1')
elif 'bb' in stroka:
stroka = stroka.replace('bb', '3')
elif 'b' in stroka:
stroka = stroka.replace('b', '4')
elif 'cde' in stroka:
stroka = stroka.replace('cde', '6')
elif 'c' in stroka:
stroka = stroka.replace('c', '5')
elif 'vvv' in stroka:
stroka = stroka.replace('vvv', '7')
print(stroka)
EDIT: Что бы не было повторения добавьте
elif 'vvv' in stroka:
stroka = stroka.replace('vvv', '7')
try:
print(int(stroka))
break
except Exception:
pass
print(stroka)
Вместо
elif 'vvv' in stroka:
stroka = stroka.replace('vvv', '7')
print(stroka)
Автор решения: strawdog
→ Ссылка
Попробуйте так:
repl_dict = {"aa":1, "aaa":2, "bb":3, "b":4, "c":5, "cde":6, "vvv":7}
a = "aaabbcdecvvv"
for i in sorted(repl_dict.keys(), key=len, reverse=True):
a = a.replace(i, str(repl_dict[i]))
print(a) # 23657
Автор решения: Kers
→ Ссылка
Как более короткий вариант по сравнению с if через регулярки:
import re
txt = "aaabbcdecvvv"
words = {"aaa" : "2",
"aa": "1",
"bb" : "3",
"b": "4",
"cde" : "6"} # И так далее
for i in words:
txt = re.sub(i, words[i], txt)
print(txt)
Единственное условие что что в словаре 'aaa' должно идти перед 'а'. Но это верно и для конструкции if - else