Вопрос по regex, python – Как избежать «\» символов в питоне

3

я очень плохо знаком с регулярным выражением и пытаюсь получить & quot; \ & quot; персонаж с использованием Python

обычно я могу избежать & quot; \ & quot; как это

print ("\\");
print ("i am \\nit");

выход

\
i am \nit

но когда я использую то же самое в regX, это не сработало, как я думал

print (re.findall(r'\\',"i am \\nit"));

и верните мне вывод

['\\']

Может кто-нибудь, пожалуйста, объясните, почему

Не рекомендуется использовать точки с запятой в Python. jamylak
Та же проблема, вопрос и ответ, что и [stackoverflow.com/questions/647769/… [1]: stackoverflow.com/questions/647769/… Boud

Ваш Ответ

4   ответа
13

EDIT: Проблема вactually какprint работает со списками & amp; строки. Он печатает представление строки, а не саму строку, представление строки, содержащей только обратную косую черту,'\\', Такfindall на самом деле правильно находит единственную обратную косую черту, ноprint не печатает его так, как вы ожидаете. Пытаться:

>>> print(re.

(Ниже приведен мой первоначальный ответ, его можно игнорировать (это совершенно не имеет значения), я изначально неверно истолковал вопрос. Но, похоже, его немного проголосовали, поэтому я оставлю его здесь.)

r префикс строки означает, что строка находится в «raw» режим, то есть\ не рассматриваются как специальные символы (это не имеет никакого отношения к "регулярному выражению").

Тем не мение,r'\' не работает, так как вы не можете завершить необработанную строку обратной косой чертой,это указано в документации:

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).

Но на самом деле вы можете использовать не необработанную строку, чтобы получить одну обратную косую черту:"\\".

@LimboPeng, я неправильно прочитал вопрос, поэтому мой первоначальный ответ был неверным.
@dbaupp Ой! Я собирался написать тот же ответ - грустный :(
В Python 2.7re.compilte("\\") дает ошибкуerror: bogus escape (end of line).
Чтобы сопоставить фактическую обратную косую черту с помощью регулярного выражения, вам нужно две обратные косые черты в регулярном выражении, а затем еще две обратные косые черты, чтобы избежать их:re.compile("\\\\") создает регулярное выражение, соответствующее одному обратному слешу.
Python анализирует строки в два прохода: сначала он вычисляет маркер начальной кавычки и смотрит, чтобы выяснить, где находится маркер конечной кавычки - это обрабатывает обратную косую черту рядом с кавычками так же, как и для необработанных строк; это должно произойти, потому что в противном случае вы не могли бы вставить кавычку в необработанную строку. Во втором проходе материал между кавычками интерпретируется.
1

Так какre.findall найдено одно совпадение, и текст совпадения состоял из обратной косой черты. Он дал вам список с одним элементом, который является строкой, которая имеет один символ, который является обратной косой чертой.

Что написано['\\'] так как'\\' как вы пишете & quot; строку с одним обратным слешем & quot; - так же, как вы должны были сделать, когда вы написали пример кодаprint "\\".

0

что здесь вы используете два различных типа строкового литерала - это обычная строка"a string" и сырая строкаr"a raw string", Обычные строковые литералы наблюдают экранирование обратной косой черты, поэтому для того, чтобы фактически поставить обратную косую черту в строку, вам также необходимо ее избежать. Необработанные строковые литералы обрабатывают обратную косую черту как любой другой символ, так что вы более ограничены тем, какие символы вы можете фактически вставить в строку (без специальных символов, для которых требуется escape-код), но проще вводить такие вещи, как регулярные выражения, потому что вы не используете ; t нужно удвоить обратную косую черту, если вам нужно добавить обратную косую черту, чтобы иметь значение внутри строки, а не только при ее создании.

-1

ах, если только обратная косая черта не предшествует закрывающей кавычке.

-1 Необработанные строки не могут заканчиваться неэкранированным \ в Python.

Похожие вопросы