Python заменяет «\» на «/», где за «\» следует «t»

Как заменить все обратные косые черты на косые черты в строке, где хотя бы за одним обратным слешем сразу следует символ 't'? Я использую replace('\\', '/'), но '\t' интерпретируется как вкладка и не заменяется.

Пример:

'D:\myfiles\test'.replace('\\','/')

Выход:

'D:/myfiles\test'

Аналогичные вещи происходят с такими комбинациями, как '\f', '\n' и т. д.


person Ana    schedule 11.02.2021    source источник
comment
\t — это один символ, табуляция. Он просто показан как два. Вы не можете получить доступ к обратной косой черты индивидуально.   -  person Klaus D.    schedule 11.02.2021


Ответы (1)


\t , \f, \n и т. д. — управляющие последовательности. Итак, всякий раз, когда вам нужно использовать их в строке, вам нужно использовать \\ вместо \.

В вашем случае вы должны сделать

'D:\\myfiles\\test'.replace('\\','/')
person chillcoder101    schedule 11.02.2021
comment
Когда вам нужна буквальная обратная косая черта, вы должны ВСЕГДА удваивать их, не пытайтесь угадать, является ли символ, следующий за обратной косой чертой, особенным или нет. Таким образом, пример будет 'D:\\myfiles\\test'. - person Mark Ransom; 11.02.2021
comment
@CATboardBETA r-строки великолепны, но знаете ли вы, что нельзя поставить обратную косую черту в качестве последнего символа? - person Mark Ransom; 11.02.2021
comment
@MarkRansom Потрясающе! - person chillcoder101; 11.02.2021
comment
Предполагая, что строка вводится пользователем как есть, т. е. с одиночными обратными косыми чертами, есть ли решение, кроме как перебирать символы один за другим, чтобы заменить их косыми чертами? - person Ana; 11.02.2021
comment
@Ana, если строка действительно введена пользователем, например. читается из консоли, последовательность \t должна состоять из двух отдельных символов, и вызов replace должен работать с ней нормально. Только строковые литералы, содержащиеся в вашем коде, будут заменены \t одним символом табуляции. - person Mark Ransom; 12.02.2021