2012-01-19 30 views
7

Tôi có một chuỗi như:chuỗi để liệt kê chuyển đổi trong python?

searchString = "u:sads asdas asdsad n:sadasda as:adds sdasd dasd a:sed eee" 

những gì tôi muốn là danh sách:

["u:sads asdas asdsad","n:sadasda","as:adds sdasd dasd","a:sed eee"] 

Những gì tôi đã làm là:

values = re.split('\s', searchString) 
mylist = [] 
word = '' 
for elem in values: 
    if ':' in elem: 
    if word: 
     mylist.append(word) 
    word = elem 
    else: 
    word = word + ' ' + elem 
list.append(word) 
return mylist 

Nhưng tôi muốn một mã tối ưu hóa trong python 2.6.

Cảm ơn

+0

bản sao có thể có của [Python - regex - Tách chuỗi trước từ] (http://stackoverflow.com/questions/6709067/python-regex-splitting-string-before-word) – outis

Trả lời

12

Sử dụng biểu thức thông thường:

import re 
mylist= re.split('\s+(?=\w+:)', searchString) 

này chia tách chuỗi ở khắp mọi nơi có một không gian tiếp theo một hoặc nhiều chữ cái và dấu hai chấm. Phần nhìn phía trước ((?= phần) làm cho nó được phân chia trên khoảng trắng trong khi vẫn giữ \w+: các phần

1

Bạn có thể sử dụng tính năng "nhìn phía trước" được cung cấp bởi nhiều công cụ biểu thức chính quy. Về cơ bản, các công cụ kiểm tra regex cho một mô hình mà không tiêu thụ nó khi nói đến nhìn về phía trước.

import re 
s = "u:sads asdas asdsad n:sadasda as:adds sdasd dasd a:sed eee" 
re.split(r'\s(?=[a-z]:)', s) 

Điều này có nghĩa, chỉ chia khi chúng tôi có một \s tiếp theo bất kỳ bức thư và một dấu hai chấm nhưng không tiêu thụ các thẻ.

Các vấn đề liên quan