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

Можете ли вы помочь мне понять это поведение:

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

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

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

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

1 ответ

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

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

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

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

Некоторое дальнейшее чтение относительно регулярных выражений: Чума Обратного слеша

Другие вопросы по тегам