Bagaimana cara membagi dan mengurai string dengan Python?

107

Saya mencoba membagi string ini dengan python: 2.7.0_bf4fda703454

Saya ingin membagi string itu pada garis bawah _sehingga saya dapat menggunakan nilai di sisi kiri.

kamal
sumber
Baca partitionmetode string, lalu perbarui pertanyaan Anda.
S. Lott

Jawaban:

141

"2.7.0_bf4fda703454".split("_") memberikan daftar string:

In [1]: "2.7.0_bf4fda703454".split("_")
Out[1]: ['2.7.0', 'bf4fda703454']

Ini membagi string di setiap garis bawah. Jika Anda ingin berhenti setelah pemisahan pertama, gunakan "2.7.0_bf4fda703454".split("_", 1).

Jika Anda mengetahui fakta bahwa string tersebut berisi garis bawah, Anda bahkan dapat mengekstrak LHS dan RHS menjadi variabel terpisah:

In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1)

In [9]: lhs
Out[9]: '2.7.0'

In [10]: rhs
Out[10]: 'bf4fda703454'

Alternatifnya adalah dengan menggunakan partition(). Penggunaannya mirip dengan contoh terakhir, hanya saja ia mengembalikan tiga komponen, bukan dua. Keuntungan utamanya adalah bahwa metode ini tidak gagal jika string tidak berisi pemisah.

NPE
sumber
80

Panduan penguraian string Python

Pisahkan string pada spasi, dapatkan daftar, tunjukkan tipenya, cetak:

el@apollo:~/foo$ python
>>> mystring = "What does the fox say?"

>>> mylist = mystring.split(" ")

>>> print type(mylist)
<type 'list'>

>>> print mylist
['What', 'does', 'the', 'fox', 'say?']

Jika Anda memiliki dua pembatas di samping satu sama lain, diasumsikan string kosong:

el@apollo:~/foo$ python
>>> mystring = "its  so   fluffy   im gonna    DIE!!!"

>>> print mystring.split(" ")
['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!']

Pisahkan string pada garis bawah dan ambil item ke-5 dalam daftar:

el@apollo:~/foo$ python
>>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor."

>>> mystring.split("_")[4]
"Kowalski's"

Ciutkan beberapa spasi menjadi satu

el@apollo:~/foo$ python
>>> mystring = 'collapse    these       spaces'

>>> mycollapsedstring = ' '.join(mystring.split())

>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']

Ketika Anda tidak memberikan parameter ke metode split Python, dokumentasi menyatakan : "run of consecutive whitespace dianggap sebagai pemisah tunggal, dan hasilnya tidak akan berisi string kosong di awal atau akhir jika string memiliki spasi di depan atau di belakang".

Pegang topi Anda, uraikan ekspresi reguler:

el@apollo:~/foo$ python
>>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz'
>>> import re
>>> mylist = re.split("[a-m]+", mystring)
>>> print mylist
['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz']

Biasa ekspresi "[am] +" berarti huruf kecil amelalui myang terjadi satu kali atau lebih dicocokkan sebagai pembatas. readalah perpustakaan yang akan diimpor.

Atau jika Anda ingin mengunyah makanan satu per satu:

el@apollo:~/foo$ python
>>> mystring = "theres coffee in that nebula"

>>> mytuple = mystring.partition(" ")

>>> print type(mytuple)
<type 'tuple'>

>>> print mytuple
('theres', ' ', 'coffee in that nebula')

>>> print mytuple[0]
theres

>>> print mytuple[2]
coffee in that nebula
Eric Leschinski
sumber
18

Jika itu selalu akan menjadi perpecahan LHS / RHS yang rata, Anda juga dapat menggunakan partitionmetode yang dibangun ke dalam string. Ini mengembalikan 3-tupel seolah- (LHS, separator, RHS)olah pemisah ditemukan, dan (original_string, '', '')jika pemisah tidak ada:

>>> "2.7.0_bf4fda703454".partition('_')
('2.7.0', '_', 'bf4fda703454')

>>> "shazam".partition("_")
('shazam', '', '')
bgporter
sumber