Как написать функцию которая нормализует строку убирая все дополнительные символы возле слов?

Необходимо написать функцию normalize(), которая нормализует строку, убрав все дополнительные символы возле слов (см. примеры).

Пример:

normalize("X > %Y")
>>"X > Y"

normalize("  X >      Y    >")
>>"X > Y"

normalize("\"X\" >'Y'> I  \t> 1Z2")
>>"X > Y > I > 1Z2"

Дополнительные символы:

!"$%&\'*+,-./:;<=?[\\]^`{|}~\t\n\x0b\x0c\r

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

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

Как вариант:

def normalize(text):
    output = ''
    for i in text:
        if i in ["!", '"', "$", "%", "&", "'", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", "?", "[", "]", "^", "`", "{", "|", "}", "~", "\t", "\n", "\x0b", "\\x0c", "\r"]:
            continue
        output += i
    return output


if __name__ == '__main__':
    print(normalize("X > %Y"))
→ Ссылка
Автор решения: MaxU
import re

chars2drop = "!\"$%&'*+,-./:;<=?[\]^`{|}~\t\n\x0b\x0c\r"

def normalize(s, chars2drop=chars2drop):
    trans_tab = str.maketrans(dict.fromkeys(list(chars2drop), " "))
    res = " ".join((s.translate(trans_tab).split()))
    res = re.sub("\s*>\s*$", "", res)
    return res

тесты:

In [70]: normalize("X > %Y")
Out[70]: 'X > Y'

In [71]: normalize("  X >      Y    >")
Out[71]: 'X > Y'

In [72]: normalize("\"X\" >'Y'> I  \t> 1Z2")
Out[72]: 'X > Y > I > 1Z2'
→ Ссылка