После this question мне было интересно, была ли функция ниже достаточной для проверки случайной последовательности символов обратной косой черты, введенной в путь, вызывающий генерирование «специального символа». Чтобы быть более понятным, \b
является обратным пространством, а \
, за которым следует число, генерирует некоторый код символа ascii. Я хочу этого избежать. Существуют также последовательности, такие как \d
, которые не имеют особого значения, и, очевидно, в этом случае автоматически исчезает \
. Я не беспокоюсь об этом. Вот моя функция:Проверка обратных косых черт корректно экранирована в строке пути
def checkPathString(dir):
slash = False
for c in repr(dir):
if c == '\\':
slash = not slash
else:
if slash:
raise ValueError('Path contains unescaped \\ characters')
кажется, правильно определить \b
или \
с последующим числом (как внутреннее представление становится \x
что-то). Это также заставило меня обнаружить \f
- это специальная последовательность, также переведенная в \x
что-то.
Определен как плохие строки:
"C:\dummy\bar" #Because of "\b"
"C:\dummy\2000" #Because of "\" followed by a number
Определен как хорошие строки:
"C:\dummy\\bar" #\d is escaped automatically because is not a special sequence
"C:\dummy\\2000"
было бы лучше, чтобы проверить, если строка имеет ASCII-только символы (между 32 и 127) –
что вы на самом деле пытаетесь проверить? Коду не существует способа определить, есть ли специальный персонаж случайно или специально. Если вы хотите проверить наличие специальных символов (для любого определения «special»), просто сделайте это. – Goyo
@Goyo Я отредактировал вопрос, пытаясь лучше определить, в чем проблема, которую я пытаюсь решить. – Antonio