2013-06-04 10 views
6

Trong Python, làm cách nào để phân tách trên dấu cách hoặc dấu gạch ngang?Python: phân tách trên dấu cách hoặc dấu gạch ngang?

Input:

You think we did this un-thinkingly? 

đầu ra mong muốn:

["You", "think", "we", "did", "this", "un", "thinkingly"] 

tôi có thể nhận được như xa như

mystr.split(' ') 

Nhưng tôi không biết làm thế nào để phân chia trên có dấu gạch nối cũng như không gian and the Python definition of split only seems to specify a string. Tôi có cần sử dụng regex không?

Trả lời

12

Nếu mô hình của bạn là đủ đơn giản cho một (hoặc có lẽ hai) replace, sử dụng nó :

mystr.replace('-', ' ').split(' ') 

Nếu không, hãy sử dụng RE theo đề xuất của @jamylak.

14
>>> import re 
>>> text = "You think we did this un-thinkingly?" 
>>> re.split(r'\s|-', text) 
['You', 'think', 'we', 'did', 'this', 'un', 'thinkingly?'] 

Như @larsmans lưu ý, để chia bởi nhiều không gian/có dấu gạch nối (bắt chước .split() không có đối số) được sử dụng [...] để có thể đọc:

>>> re.split(r'[\s-]+', text) 
['You', 'think', 'we', 'did', 'this', 'un', 'thinkingly?'] 

Nếu không có regex (regex là lựa chọn đơn giản nhất trong trường hợp này):

>>> [y for x in text.split() for y in x.split('-')] 
['You', 'think', 'we', 'did', 'this', 'un', 'thinkingly?'] 

Thực ra câu trả lời bằng @Elazar không có regex cũng khá đơn giản (tôi vẫn sẽ xác minh cho việc tái hợp x mặc dù)

+0

Tôi nghĩ rằng regex là tốt hơn cho trường hợp chung (bất kỳ dấu gạch ngang, nói), nơi 'thay thế' là tốt hơn cho các trường hợp đơn giản hơn. – Elazar

+0

Và tôi khuyên bạn nên nhúng câu trả lời của tôi vào câu trả lời của bạn và tôi sẽ xóa câu trả lời đó. để người đọc sẽ có được bức tranh hoàn chỉnh. – Elazar

+0

@Elazar có 'thay thế' có thể lộn xộn sau nhiều hơn một, nó hoạt động hoàn hảo ở đây mặc dù. Tôi không muốn nhúng câu trả lời của bạn, bạn xứng đáng với số phiếu bầu cho nó – jamylak

1

Một regex là xa dễ dàng hơn và tốt hơn, nhưng nếu bạn kiên quyết phản đối việc sử dụng một:

import itertools 

itertools.chain.from_iterable((i.split(" ") for i in myStr.split("-")))