Получение PEP8 предупреждения «неверная escape-последовательность» при попытке избежать скобок в регулярном выражении - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь экранировать строку, такую ​​как эта:

string = re.split(")(", other_string)

Потому что отсутствие этих скобок выдает ошибку. Но если я сделаю это:

string = re.split("\)\(", other_string)

Я получу предупреждение от PEP8, что это недопустимая escape-последовательность. Есть ли способ сделать это правильно?

Помещение 'r' перед строкой не исправляет это.

1 Ответ

2 голосов
/ 29 апреля 2020

Вы, вероятно, ищете это , что означало бы, что ваша строка будет записана как string = r")(", которая будет экранирована. Хотя это с 2008 года и в python 2, который постепенно сокращается. Что делает r, так это делает его "необработанной строкой"

См .: Как исправить " DeprecationWarning: неверная escape-последовательность" в Python? .

То, с чем вы имеете дело, это строковые литералы, которые можно увидеть в PEP 8 Руководство по стилю

ОБНОВЛЕНИЕ Для редактирования в вопросе:

Если вы пытаемся разделить на ") (", тогда вот рабочий пример, который не выдает предупреждения PEP8:

import re

string = r"Hello my darling)(!"
print(string)
string = re.split(r'\)\(', string)
print(string)

, который выводит:

Hello )(world!
['Hello ', 'world!']

Или вы можете избежать обратного слэса sh явно с использованием двух обратных косых черт:

import re

string = r"Hello )(world!"
print(string)
string = re.split('\\)\\(', string)
print(string)

, которые выводят одно и то же:

Hello )(world!
['Hello ', 'world!']
...