2015-08-07 3 views
2

Мне интересно, есть ли способ, повторяя строку с циклом for, чтобы удалить часть строки и сделать что-то еще с ней.Python - наличие подзаголовка с той же переменной

В принципе, я хочу начать с одной строки «первая часть | средняя |, конец» и заканчивать двумя строками. Переменная «buffer» должна содержать «первая часть, конец», а вторая строка должна содержать «| средний |»

word = "first portion|middle|,end" 
buffer = '' 

for i in word: 
    if i == '|': 
     # Loop in here until another pipeline is found while saving each character 
    else: 
     buffer += i 

У меня уже есть программа, которая анализирует исходную строку и организует его так в идеале я просто хочу иметь если заявление в течение цикла, который будет удалить что-нибудь между трубопроводами и сохранить его. Если это невозможно, я переписал программу, чтобы позволить мне это сделать.

ответ

1

Вы ищете str.split() функция?

Вы можете передать ему символ PIPE, и он разделил бы строку в тех местах, где она найдет |, и вернет вам список разделенных строк. Пример -

>>> word = "first portion|middle|,end" 
>>> word.split('|') 
['first portion', 'middle', ',end'] 

Тогда, если вы уверены, что всегда будет только три элемента, возьмите первый и третий элемент, и объединить их для первого результата строки вы хотите, и использовать второй элемент для второго результата , Пример -

>>> word = "first portion|middle|,end" 
>>> l = word.split('|') 
>>> result1 = l[0] + l[2] 
>>> result2 = l[1] 
>>> result1 
'first portion,end' 
>>> result2 
'middle' 
0

Если вы уверены, что ваша строка в виде "str1|str2|str3" вы можете использовать split

>>> l = "first portion|middle|,end".split('|') 
>>> l[0]+l[-1] 
'first portion,end' 
>>> l[1] 
'middle' 
0

Это не очень оптимизирован, но это будет делать трюк.

import re 
middle = re.findall('\|[a-zA-Z]+\|', s)[0] 
other = re.split('\|[a-zA-Z]+\|', s) 
0

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

Regexp (.*)(\|.*\|)(.*) будет захватывать любой текст, содержащийся между двумя трубами и текстом до и после него ((.*) фиксирует любую текстовую строку с 0 или более символами).

>>> import re 
>>> p = re.compile(ur'(.*)(\|.*\|)(.*)') 
>>> test_str = u"first portion|middle|,end" 
>>> strings = p.match(test_str).groups() 

Здесь strings будет иметь части, которые вы хотели:

>>> strings 
(u'first portion', u'|middle|', u',end') 
>>> buffer = strings[0] + strings[2] 
>>> second = strings[1] 

>>> buffer 
u'first portion,end' 
>>> second 
u'|middle|' 

Вы можете проверить регулярные выражения в Интернете на сайтах, как regex101, хотя я бы рекомендовал использовать их для текста которого вы знаете структуру.

Смежные вопросы