EDIT: проблема фактически как print
работы со списками & строк. Он печатает представление строки, а не самой строки, представление строки, содержащей только обратную косую черту, равно '\\'
. Таким образом, findall
на самом деле находит одиночную обратную косую черту правильно, но print
не печатает ее, как вы ожидали. Попробуйте:
>>> print(re.findall(r'\\',"i am \\nit")[0])
\
(Ниже мой первоначальный ответ, его можно игнорировать (это совершенно не имеет значения), я неправильно вопрос изначально, но это, кажется, было upvoted немного, поэтому я. «оставлю это здесь.)
r
префикса на строке означает, что строка находится в режиме„сырого“, то есть, \
не рассматривается как специальные символов (это не имеет ничего общего с„регулярным выражением“).
Однако r'\'
не работает, так как вы не можете закончить необработанную строку с обратным косой чертой it's stated in the docs:
Even in a raw string, string quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character).
Но вы на самом деле можно использовать не сырую строку, чтобы получить один обратный слэш: "\\"
.
Неплохая практика использования точек с запятой в python. – jamylak
Тот же вопрос, вопрос и ответ как [http://stackoverflow.com/questions/647769/why-cant-pythons-raw-string-literals-end-with-a-single-backslash][1] [1]: http://stackoverflow.com/questions/647769/why-cant-pythons-raw-string-literals-end-with-a-single-backslash – Boud