2016-12-01 5 views
2

Пример:Как разбить строку и добавить позиции строк перед разбиением?

s=" 300  january  10  20  " 
mylist = s.split() 
mylist = ['300', 'january', '10', '20'] 

Как я могу создать список, добавив позицию строки элементов перед расщеплением:

mylistStringPos = [['300',startpos:endpos],...] 
mylistStringPos = [['300',2:5], '['january',12:19]', '['10',25:27]', '['20',34:36]']] 

Есть ли способ в Python, чтобы сделать это?

+0

Какой тип '2 : 5'? Это строка, «2: 5»? Как насчет '[['300', 2, 5], ['январь', 12, 19], ['10', 25, 27], ['20', 34, 36]]' output? –

ответ

5

Вы можете использовать re с \S+ рисунком, чтобы соответствовать непробельных куски текста и доступа m.group(), m.start() и m.end() собрать необходимые данные:

import re 
s=" 300  january  10  20  " 
print([[x.group(), x.start(), x.end()] for x in re.finditer(r'\S+', s)]) 
# => [['300', 2, 5], ['january', 12, 19], ['10', 25, 27], ['20', 34, 36]] 

См this Python demo

+1

so easy :) Спасибо Wiktor – Reman

+0

Wiktor, просто последний вопрос: если я хочу разбить строку только тогда, когда между элементами есть два пробела больше, как мне нужно адаптировать регулярное выражение finditer? – Reman

+1

Используйте ['r '\ S + (?: \ S \ S +) *''] (https://regex101.com/r/Qr9sRX/1). Или если вы обрабатываете только * строки *, 'r '\ S + (?: [^ \ S \ r \ n] \ S +) *''. –