Python заменяет непечатаемые символы, кроме разрыва строки ⇐ Python
-
Гость
Python заменяет непечатаемые символы, кроме разрыва строки
Я пытаюсь написать функцию, которая заменяет непечатаемые символы пробелом, это работает хорошо, но она также заменяет разрыв строки \n пробелом. Не могу понять почему.
Тестовый код:
импортировать повторно защита replace_unknown_characters_with_space(input_string): # Заменить непечатаемые символы (включая escape-последовательности) пробелами # Согласно ChatGPT, \n не должен находиться в этом диапазоне очищенная_строка = re.sub(r'[^\x20-\x7E]', '', input_string) вернуть очищенную_строку защита основной(): test_string = "Это тестовая строка с некоторыми непечатаемыми символами:\nHello\x85World\x0DThis\x0Ais\x2028a\x2029test." print("Исходная строка:") печать (test_string) очищенная_строка = replace_unknown_characters_with_space(test_string) print("\nОчищенная строка:") печать (очищенная_строка) если __name__ == "__main__": основной() Выход:
Исходная строка: Это тестовая строка с некоторыми непечатаемыми символами: Привет Этод это 28а 29тест. Очищенная строка: Это тестовая строка с некоторыми непечатаемыми символами: Hello World. Это 28a 29test. Как видите, разрыв строки перед Hello World заменяется пробелом, что не предусмотрено. Я пытался получить помощь от ChatGPT, но его решения по регулярным выражениям не работают.
Мой последний вариант — использовать цикл for и использовать встроенный в Python метод isprintable() для фильтрации символов, но это будет намного медленнее по сравнению с регулярным выражением.
Я пытаюсь написать функцию, которая заменяет непечатаемые символы пробелом, это работает хорошо, но она также заменяет разрыв строки \n пробелом. Не могу понять почему.
Тестовый код:
импортировать повторно защита replace_unknown_characters_with_space(input_string): # Заменить непечатаемые символы (включая escape-последовательности) пробелами # Согласно ChatGPT, \n не должен находиться в этом диапазоне очищенная_строка = re.sub(r'[^\x20-\x7E]', '', input_string) вернуть очищенную_строку защита основной(): test_string = "Это тестовая строка с некоторыми непечатаемыми символами:\nHello\x85World\x0DThis\x0Ais\x2028a\x2029test." print("Исходная строка:") печать (test_string) очищенная_строка = replace_unknown_characters_with_space(test_string) print("\nОчищенная строка:") печать (очищенная_строка) если __name__ == "__main__": основной() Выход:
Исходная строка: Это тестовая строка с некоторыми непечатаемыми символами: Привет Этод это 28а 29тест. Очищенная строка: Это тестовая строка с некоторыми непечатаемыми символами: Hello World. Это 28a 29test. Как видите, разрыв строки перед Hello World заменяется пробелом, что не предусмотрено. Я пытался получить помощь от ChatGPT, но его решения по регулярным выражениям не работают.
Мой последний вариант — использовать цикл for и использовать встроенный в Python метод isprintable() для фильтрации символов, но это будет намного медленнее по сравнению с регулярным выражением.
Мобильная версия