Символ backsla sh в Regex для Python - PullRequest
2 голосов
/ 10 апреля 2020

В документации Python для Regex автор упоминает:

регулярные выражения используют символ backsla sh ('\') для обозначения специальных форм или разрешить использование специальных символов, не вызывая их особого значения. Это противоречит использованию Python одного и того же символа для той же цели в строковых литералах.

Затем он приводит пример соответствия \section в регулярном выражении:

для совпадения с литералом backsla sh, нужно написать '\\' как строку RE, потому что регулярное выражение должно быть \, а каждый обратный слеш должен быть выражен как \ внутри обычного строкового литерала Python. В RE, которые имеют обратную косую черту несколько раз, это приводит к множеству повторных обратных косых черт и затрудняет понимание результирующих строк.

Затем он говорит, что решение этой "чумы обратного хода sh" должно начаться строка с r, чтобы превратить ее в необработанную строку.

Позже, однако, он приводит этот пример использования Regex:

p = re.compile('\d+')
p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping')

, что приводит к:

['12', '11', '10']

Я запутался в том, что почему нам не нужно было включать r в этом случае до '\d+'. На основании предыдущих объяснений backsla sh я подумал, что нам нужно будет сказать Python, что backsla sh в этой строке не является backsla sh, который он знает.

Ответы [ 2 ]

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

Python распознает только некоторые последовательности, начинающиеся с \, как escape-последовательности. Например, \d не является известной escape-последовательностью, поэтому для этого конкретного случая нет необходимости избегать обратного слэша, чтобы сохранить его там.

(In Python 3.6) "\d" и "\\d" эквивалент:

>>> "\d" == "\\d"
True
>>> r"\d" == "\\d"
True

Вот список всех распознанных escape-последовательностей: https://docs.python.org/3/reference/lexical_analysis.html#string -and-bytes-literals

0 голосов
/ 10 апреля 2020

Ему нужен обратный символ sh в качестве escape-символа для обозначения ди git класса '\r'. Поскольку это непечатаемый символ, его нельзя [по крайней мере легко] включить в необработанную строку. r'\d' будет интерпретироваться как \d, а не как класс di git.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...