Ну так почитай
основы.
Во-первых, используй r-строки, чтобы не натыкаться на проблемы с символом
\.
Во-вторых, изучи зарезервированные символы регулярных выражений, а именно:
( ) [ ] ^ $ . ? * +. Если тебе нужен этот символ как просто символ, его надо экранировать! Т.е. если тебе нужно совпадение с символом
?, надо писать
\?.
В-третьих, для поиска символа из указанного набора используются квадратные скобки, т.е.
[abc] совпадёт с одним символом из указанных: a, b или c. Для задания диапазона можно сделать так:
[a-z]. Это зачастую короче.
В-четвёртых, для поиска символа НЕ из указанного набора используется такой синтаксис:
[^abc]
В-пятых, есть заранее заданные наборы. Например,
\w описывает словесные символы (буквы, цифры и подчёркивание),
\d описывает цифры, и т.д. Аналогично,
\W и
\D описывают всё кроме словесных символов и цифр, соотв.
Тогда у тебя будет два варианта
Если подчёркивание - не проблема:
re.sub(r'\W', '', 'test:_:test', re.I) # даст test_test
Если подчёркивание тоже нужно убрать:
re.sub(r'[\W_]', '', 'test:_:test', re.I) # даст testtest