Расщепление при первом появлении

309

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

Например:

"123mango abcd mango kiwi peach"

разделив на первое, mangoполучим:

"abcd mango kiwi peach"
Желудь
источник

Ответы:

524

Из документов :

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'
utdemir
источник
8
@Swiss: ну и что. Техника все та же.
Игнасио Васкес-Абрамс
6
@Ignacio: я просто указываю на это. Нет причин иметь частично правильный ответ вместо полностью правильного.
Швейцарский
Технически предполагает правильный разделитель. Первым является индекс [1]. Тот, на который мы все ссылаемся, будет, конечно, нулевым индексом. : D Семантика.
Исаак Корбетт
27

Для меня лучший подход заключается в следующем:

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

... потому что если случится, что вхождение не в строке, которую вы получите " IndexError: list index out of range".

Следовательно -1, не будет причинено никакого вреда, так как количество вхождений уже установлено в единицу.

Alex
источник
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>)

Таким образом, это делает распаковку вывода действительно гибкой, поскольку в результирующем кортеже всегда будет 3 элемента.

heemayl
источник
-2
df.columnname[1].split('.', 1)

Это разделит данные с первым появлением «.» в строке или столбце данных значения столбца.

Химаншу Арора
источник