Розщеплення за першим появою


309

Що було б найкращим способом розділити рядок при першому появі роздільника?

Наприклад:

"123mango abcd mango kiwi peach"

розщеплення першим, mangoщоб отримати:

"abcd mango kiwi peach"

Відповіді:


522

З документів :

str.split([sep[, maxsplit]])

Поверніть список слів у рядку, використовуючи sep як розділовий рядок. Якщо задано maxsplit , щонайбільше maxsplit розщеплення робиться (таким чином, у списку буде не більше maxsplit+1елементів).

s.split('mango', 1)[1]

Примітка: якщо після досягнення maxsplitпідрахунку можна виконати більше розщеплення , останній елемент у списку буде містити решту рядка (включаючи будь-які sepсимволи / рядки).
BuvinJ

64
>>> s = "123mango abcd mango kiwi peach"
>>> s.split("mango", 1)
['123', ' abcd mango kiwi peach']
>>> s.split("mango", 1)[1]
' abcd mango kiwi peach'

8
@Swiss: Так що. Техніка все одно та сама.
Ігнасіо Васкес-Абрамс

6
@Ignacio: Я просто вказую на це. Немає причин мати частково правильну відповідь замість повністю правильної.
Швейцарія

Технічно передбачає правильний роздільник. "Першим" є індекс [1]. Той, про який ми всі посилаємось, звичайно, був би нульовим індексом. : D Семантика.
Ізаак Корбетт

27

Для мене кращим підходом є такий:

s.split('mango', 1)[-1]

... тому що якщо трапиться, що виникнення не в рядку, ви отримаєте "IndexError: list index out of range" .

Тому -1не отримає ніякої шкоди, тому що кількість подій вже встановлено в один.


1
Як було написано раніше, це кількість випадків, в яких застосовується метод split (). Метод знайде та застосує лише першу рядок "манго".
Олексій

2

Ви також можете використовувати str.partition:

>>> text = "123mango abcd mango kiwi peach"

>>> text.partition("mango")
('123', 'mango', ' abcd mango kiwi peach')

>>> text.partition("mango")[-1]
' abcd mango kiwi peach'

>>> text.partition("mango")[-1].lstrip()  # if whitespace strip-ing is needed
'abcd mango kiwi peach'

Перевага використання str.partitionполягає в тому, що він завжди поверне кортеж у формі:

(<pre>, <separator>, <post>)

Таким чином, це робить розпакування виводу дійсно гнучким, оскільки в отриманому кортежі завжди буде три елементи.


-2
df.columnname[1].split('.', 1)

Це розділить дані з першого появи "." у значенні стовпця або фрейму даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.