Chia tách lần đầu tiên


309

Điều gì sẽ là cách tốt nhất để phân chia một chuỗi trong lần xuất hiện đầu tiên của một dấu phân cách?

Ví dụ:

"123mango abcd mango kiwi peach"

tách trên đầu tiên mangođể có được:

"abcd mango kiwi peach"

Câu trả lời:


522

Từ các tài liệu :

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

Trả về danh sách các từ trong chuỗi, sử dụng sep làm chuỗi phân cách. Nếu maxsplit được đưa ra, hầu hết các phần tách maxsplit được thực hiện (do đó, danh sách sẽ có hầu hết maxsplit+1các phần tử).

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

Lưu ý: nếu có thể thực hiện nhiều lần phân tách hơn sau khi đạt đến maxsplitsố đếm, phần tử cuối cùng trong danh sách sẽ chứa phần còn lại của chuỗi (đã bao gồm bất kỳ sepký tự / chuỗi nào).
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: Vậy thì sao. Kỹ thuật vẫn vậy.
Ignacio Vazquez-Abrams

6
@Ignacio: Tôi chỉ chỉ ra điều đó. Không có lý do để có một câu trả lời đúng một phần thay cho câu trả lời hoàn toàn chính xác.
Thụy Sĩ

Về mặt kỹ thuật giả định dấu phân cách chính xác. 'Đầu tiên' là chỉ số [1]. Tất nhiên chúng ta đang tham khảo tất nhiên sẽ là chỉ số zero-ith. : D Ngữ nghĩa.
Izaac Corbett

27

Đối với tôi cách tiếp cận tốt hơn là:

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

... bởi vì nếu xảy ra sự cố đó không nằm trong chuỗi bạn sẽ nhận được " IndexError: list index out of range".

Do đó, -1sẽ không có bất kỳ tác hại gây ra số lần xuất hiện đã được đặt thành một.


1
Như được viết trước đó là số lần xuất hiện trong đó phương thức split () đang được áp dụng. Phương pháp sẽ tìm và chỉ áp dụng chuỗi 'xoài' đầu tiên.
Alex

2

Bạn cũng có thể sử dụng 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'

Ưu điểm của việc sử dụng str.partitionlà nó sẽ luôn trả về một tuple dưới dạng:

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

Vì vậy, điều này làm cho việc giải nén đầu ra thực sự linh hoạt vì luôn có 3 yếu tố trong bộ kết quả.


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

Điều này sẽ phân chia dữ liệu với lần xuất hiện đầu tiên của '.' trong giá trị cột chuỗi hoặc khung dữ liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.