Помимо приведенного вами примера, вы не указали какой-либо конкретный набор правил для замены строк, поэтому мне нужно угадать, каковы ваши намерения.
Вот несколькоопции.Первый - это метод грубой силы, который просто выполняет буквальные замены.Второе и третье используют регулярные выражения для более общего и расширяемого подхода.
import re
# in: ABC <123> <abg 46547> <!ab123>
# out: ABC_123_46547_ab123
#
# Need to substitute the following:
# " <abg " with "_"
# " <!" with "_"
# " <" with "_"
# ">" with ""
# ------------------------------------------------
# 1st option
# ------------------------------------------------
s1 = "ABC <123> <abg 46547> <!ab123>"
s2 = s1 \
.replace(" <abg ", "_") \
.replace(" <!", "_") \
.replace(" <", "_") \
.replace(">", "")
print("Option #1: literal")
print("\tbefore : {}".format(s1))
print("\tafter : {}".format(s2))
# ------------------------------------------------
# 2nd option
# ------------------------------------------------
s3 = s1
replacements_literal = [
(" <abg ", "_"),
(" <!", "_"),
(" <", "_"),
(">", "")
]
for old, new in replacements_literal:
s3 = re.sub(old, new, s3)
print("\nOption #2: literal, with loop")
print("\tbefore : {}".format(s1))
print("\tafter : {}".format(s3))
# ------------------------------------------------
# 3rd option
# ------------------------------------------------
s4 = s1
replacements_regex = [
(" *<[a-z]+ *", "_"),
(" *<!", "_"),
(" *<", "_"),
(">", "")
]
for old, new in replacements_regex:
s4 = re.sub(old, new, s4)
print("\nOption #3: regex, with loop")
print("\tbefore : {}".format(s1))
print("\tafter : {}".format(s4))
Вывод выглядит так:
Option #1: literal
before : ABC <123> <abg 46547> <!ab123>
after : ABC_123_46547_ab123
Option #2: literal, with loop
before : ABC <123> <abg 46547> <!ab123>
after : ABC_123_46547_ab123
Option #3: regex, with loop
before : ABC <123> <abg 46547> <!ab123>
after : ABC_123_46547_ab123