Как разделить список строк на основе строки разделителя, которая заканчивается в Python определенным символом? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть текст, который содержит много строк.

Я хочу разбить его на основе строки, которая заканчивается определенным символом.

Например: мой текст содержит данные ниже

Hi
I'm here:
London
UK
USA
Where are you:
here 
there
what will you do:
something
somethin2

Я хочу разбить этот текст на список с разделителем в виде строки, которая заканчивается на

двоеточие - :

В этом случае список окончательных результатовбудет [ Hi, London UK USA, here there, something somethin2 ] Как мне это сделать в Python?

Я знаю, что мы можем разделить с помощью одного символа или какой-либо другой строки, которая является общим разделителем.Но что делать в этом случае?

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вы можете использовать itertools.groupby:

import itertools
data = [[a, list(b)] for a, b in itertools.groupby(content.split('\n'), key=lambda x:x.endswith(':'))]
final_result = [' '.join(b) for a, b in data if not a]

Выход:

['Hi', 'London UK USA', 'here there', 'something somethin2']
0 голосов
/ 25 октября 2018

Вы можете использовать регулярное выражение:

>>> import re
>>> [s.strip().replace('\n',' ') for s in re.split(r'^.*:$',txt, flags=re.M)] 
['Hi', 'London UK USA', 'here there', 'something somethin2']

Регулярное выражение ^.*:$ находит полные строки, заканчивающиеся на :

Демо

И re.splits разбивает строку в этом шаблоне и удаляет разделительную строку.Затем замените \n на ' ' в каждом строковом блоке, и вы получите желаемый результат.

0 голосов
/ 25 октября 2018

Вот небольшой пример того, как это можно сделать.

Примечание: легче понять, но гораздо менее эффективно, чем ответ @ Ajax1234.

text = '''Hi
I'm here:
London
UK
USA
Where are you:
here 
there
what will you do:
something
somethin2'''

# add comma if there is ':' or else insert the line
output = [line.strip() if ':' not in line else ',' for line in text.split('\n')] 

# join the list on space
output = ' '.join(output) 

# split back into list on ',' and trim the white spaces
output = [item.strip() for item in output.split(',')]

print(output)

Выходы:

['Hi', 'London UK USA', 'here there', 'something somethin2']
...