Ваше регулярное выражение будет соответствовать только строкам "~" и (хотите верьте, хотите нет) "~ \ n".
Вам нужен re.match (r ". * ~ $", Что угодно) ... это означает ноль или более (что угодно, кроме новой строки), за которым следует тильда, за которой следует (конец строки или новая строка, предшествующая конец строки).
В маловероятном случае, когда имя файла может содержать символ новой строки, используйте флаг re.DOTALL и используйте \ Z вместо $.
"работал" на других языках: вы должны были использовать функцию поиска.
r в начале строковой константы означает необработанные переходы, например, '\ n' является новой строкой, но r '\ n' - это два символа, обратный слеш, за которым следует n - который также может быть представлен как \ n. Необработанные переходы сохраняют много \\
в регулярных выражениях, нужно использовать r "регулярное выражение" автоматически
Кстати: в этом случае избегайте путаницы с регулярными выражениями ... используйте what.endswith ('~')