Поведение расщепления для строки с префиксом 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
когда вы смотрите на регулярные выражения людей, они не хотят экранировать символы обратной косой черты, которые также имеют особое значение в регулярных выражениях.
Некоторое дальнейшее чтение относительно регулярных выражений: Чума Обратного слеша