Поведение на разделяне за низ с префикс 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, а не модел на Regex.   -  person    schedule 14.07.2014
comment
Намерих отговора на stackoverflow.com/questions/2241600/python-regex-r-prefix   -  person Darshan Pandit    schedule 14.07.2014
comment
За да разширим това малко: r"\\" е две обратни наклонени черти; обратните наклонени черти не се третират като екраниращ знак в необработен низ. "\\" е една обратна наклонена черта.   -  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, когато разглеждате регулярния израз на хората, е, че те не искат да избягват символите с обратна наклонена черта, които също имат специално значение в регулярните изрази.

Допълнителна информация относно регулярните изрази: The Backslash Plague

person timgeb    schedule 14.07.2014