Python как заменить обратную косую черту на re.sub ()

У меня есть следующая строка

mystr1 = 'mydirname'
myfile = 'mydirname\myfilename'

Я пытаюсь это сделать

newstr = re.sub(mystr1 + "\","",myfile)

Как мне избежать обратной косой черты, которую я пытаюсь объединить с mystr1?

 user83843714 мая 2012 г., 16:38
@ Amadan, спасибо за ответ, но я не пытаюсь манипулировать какими-либо путями, я просто пытаюсь извлечь контент из определенного файла (для этого я использую os.path), а затем минимизирую данные и размещение его в виде JS-переменной в соответствии с исходным именем файла. Я просто манипулирую строкой имени файла (которая включает полный путь) для JS var.
 Amadan14 мая 2012 г., 16:42
Я просто подумал, что то, что ты делаешь, почти такое же, какos.path.basename(myfile). Виноват
 Amadan14 мая 2012 г., 16:33
Я знаю, что это никоим образом не ответит на твой вопрос, но, если возможно, даже не ходи туда; использоватьos.path.join и другиеos.path функции для управления путями независимым от системы образом.

Ответы на вопрос(2)

Решение Вопроса

Вам нужен четырехкратный обратный слеш:

newstr = re.sub(mystr1 + "\\\\", "", myfile)

Reason:

Regex для сопоставления с одной обратной косой чертой:\\ Строка, чтобы описать это регулярное выражение:"\\\\".

Или вы можете использовать необработанную строку, поэтому вам нужен только двойной обратный слеш:r"\\"

 mpag08 авг. 2017 г., 21:05
ты тоже можешь сделатьnewstr = re.sub(mystr1 + re.escape("\\"), "", myfile). Если ваш слеш находится в своей собственной переменнойslash = "\\", Вы можетеre.sub(mystr1 + re.escape(slash), "", myfile)
 Cees Timmerman27 авг. 2012 г., 12:01
Но я только что заметил, что идет только для неизвестных побегов, как "\:".
 Cees Timmerman27 авг. 2012 г., 11:54
Нет в моем Python 3.2 (r32: 88445, 20 февраля 2011, 21:29:02) [MSC v.1500 32 бит (Intel)] на win32:>>> subject = "is th\is: a path?"; re.sub("[/\\\:?\"]", "_", subject) 'is th_is_ a path_'
 user83843714 мая 2012 г., 16:34
Это работает, спасибо. Я приму ответ, как только смогу.

как и любой другой символ, поместив перед ней обратную косую черту. Это означает, что "\\" - это один обратный слеш.

 Tim Pietzcker14 мая 2012 г., 16:48
Да, но мы имеем дело со строками, которые Содержат регулярное выражение. Применяются правила двойного побега.
 mpag08 авг. 2017 г., 22:08
и хотя вы можете подумать, что r "\" получит вас так же, как "\\", так как r "\\" означает "\\\\", вы ошибаетесь ... вы не можете иметь одиночный \: P
 Reinout van Rees15 мая 2012 г., 04:33
TEOUltimus: ваш ответ в основном правильный; проблема была чуть глубже. Я буду голосовать так, чтобы это было в 0 вместо -1. Еще один отзыв в следующий раз: комментарий «почему я ненавижу питона» не очень ценится в stackoverflow. Stackoverflow предназначен для убедительных ответов, а не для грязного слияния.

Ваш ответ на вопрос