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


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'

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>)

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


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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.