Làm cách nào để tách và phân tích cú pháp một chuỗi trong Python?


107

Tôi đang cố gắng chia chuỗi này trong python: 2.7.0_bf4fda703454

Tôi muốn tách chuỗi đó trên dấu gạch dưới _để tôi có thể sử dụng giá trị ở phía bên trái.


Đọc partitionphương pháp của chuỗi, và sau đó cập nhật câu hỏi của bạn.
S.Lott

Câu trả lời:


141

"2.7.0_bf4fda703454".split("_") đưa ra danh sách các chuỗi:

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

Điều này sẽ chia chuỗi ở mọi dấu gạch dưới. Nếu bạn muốn nó dừng lại sau lần chia đầu tiên, hãy sử dụng "2.7.0_bf4fda703454".split("_", 1).

Nếu bạn biết thực tế rằng chuỗi chứa dấu gạch dưới, bạn thậm chí có thể giải nén LHS và RHS thành các biến riêng biệt:

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

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

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

Một thay thế là sử dụng partition(). Cách sử dụng tương tự như ví dụ cuối cùng, ngoại trừ việc nó trả về ba thành phần thay vì hai. Ưu điểm chính là phương pháp này không bị lỗi nếu chuỗi không chứa dấu phân tách.


80

Hướng dẫn phân tích cú pháp chuỗi Python

Tách một chuỗi trên không gian, lấy một danh sách, hiển thị loại của nó, in ra:

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?']

Nếu bạn có hai dấu phân cách bên cạnh nhau, chuỗi trống được giả định:

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

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

Tách một chuỗi trên dấu gạch dưới và lấy mục thứ 5 trong danh sách:

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

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

Thu gọn nhiều khoảng trắng thành một

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

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

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

Khi bạn không truyền tham số nào cho phương thức phân tách của Python, tài liệu cho biết : "các khoảng trắng liên tiếp được coi là một dấu phân tách duy nhất và kết quả sẽ không chứa chuỗi trống ở đầu hoặc cuối nếu chuỗi có khoảng trắng đầu hoặc cuối".

Hãy giữ lấy chiếc mũ của bạn, các chàng trai, hãy phân tích cú pháp trên một biểu thức chính quy:

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

Các biểu hiện thường xuyên "[am] +" có nghĩa là các chữ cái viết thường aqua mxảy ra một hoặc nhiều lần được kết hợp như một dấu phân cách. relà một thư viện được nhập.

Hoặc nếu bạn muốn cắt từng món một:

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

18

Nếu nó luôn luôn là một phân tách LHS / RHS chẵn, bạn cũng có thể sử dụng partitionphương pháp được tích hợp trong chuỗi. Nó trả về một bộ 3 như (LHS, separator, RHS)thể dấu phân tách được tìm thấy và (original_string, '', '')nếu dấu phân tách không xuất hiện:

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

>>> "shazam".partition("_")
('shazam', '', '')
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.