Поведение разделения для строки с префиксом r

Не могли бы вы помочь мне понять это поведение:

>>> a = "abc\\def\\ghi"
>>> a.split(r"\\")
['abc\\def\\ghi']

Однако, потратив несколько минут и перестановок, я обнаружил, что это работает на данный момент:

>>> a.split("\\")
['abc', 'def', 'ghi']

Можете ли вы указать мне на литературу/дизайн-соображения, которые приводят к такому поведению?


person Darshan Pandit    schedule 14.07.2014    source источник
comment
Это не имеет ничего общего с Regex. r означает raw-string, а не шаблон регулярного выражения.   -  person    schedule 14.07.2014
comment
Ответ найден на странице stackoverflow.com/questions/2241600/python-regex-r-prefix.   -  person Darshan Pandit    schedule 14.07.2014
comment
Чтобы немного расширить это: r"\\" — это две обратные косые черты; обратная косая черта не рассматривается как escape-символ в необработанной строке. "\\" — это одна обратная косая черта.   -  person Tom Zych    schedule 14.07.2014
comment
В дополнение к тому, что сказал @iCodez, вы можете часто находить необработанные строки, используемые для регулярных выражений, потому что в регулярном выражении часто используется обратная косая черта, и постоянно удваивать их сложно.   -  person Mark Ransom    schedule 14.07.2014
comment
Спасибо всем. Stackoverflow — это круто! :)   -  person Darshan Pandit    schedule 14.07.2014


Ответы (1)


Ваша строка содержит обычные одиночные символы обратной косой черты, которые были экранированы:

>>> a = "abc\\def\\ghi"
>>> a
'abc\\def\\ghi'
>>> print(a)
abc\def\ghi

Когда вы разделяете на "\\", вы экранируете одну обратную косую черту, поэтому вы разделяете на одну обратную косую черту и получаете список из трех элементов: ['abc', 'def', 'ghi']. Когда вы разделяете на r"\\", вы разделяете на два обратных слэша, потому что префикс строки с r — это обозначение исходной строки в Python (которое не имеет ничего общего с регулярными выражениями). Здесь важно то, что обратная косая черта не обрабатывается каким-либо особым образом в необработанном строковом литерале.

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

Дополнительная информация о регулярных выражениях: Чума с обратной косой чертой

person timgeb    schedule 14.07.2014