python, перечислить все между двумя тегами - PullRequest
2 голосов
/ 22 июня 2011

Я ищу самый короткий и удобный способ кодирования следующего.

скажем, у меня есть строка, содержащая: 'the f<ox jumpe>d over the l<azy> dog <and the >fence'

Использование <как открывающий тег и> как закрывающийтег, я хотел бы сохранить все промежуточное в список.

если сохранить в list1, list1 будет равно ['ox jumpe', 'azy', 'и']

Кто знаетхорошего, аккуратного КРАТКОГО способа сделать это.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 22 июня 2011

Регулярные выражения должны помочь:

import re

text = 'the f<ox jumpe>d over the l<azy> dog <and the >fence'
list = re.findall('.*?\<(.*?)\>.*?', text)

print list

Редактировать:

Подробнее о регулярных выражениях можно прочитать здесь

Главным образом, что делает регулярное выражение:

. *?- не жадное совпадение всех символов до следующего требуемого символа

\ <- соответствует <char </p>

(. *?) - не жадное совпадение всех символов до следующего требуемого символа, захвати возвращает их

1 голос
/ 22 июня 2011

Предполагая, что каждое "<" и каждое ">" указывают начало или конец тега, например, вы не можете <hi<there>:

x="<a><bb><ccc>"
>>> starts=(i for i,c in enumerate(x) if c=="<")
>>> ends=(i for i,c in enumerate(x) if c==">")
>>> ans=[x[i+1:j] for i,j in zip(starts,ends)]
>>> ans
['a', 'bb', 'ccc']

использовать izip, если это большой xml-файл для экономии памяти(Хотя x [i + 1: j] нужно будет изменить, так как вам не нужно, чтобы весь файл представлял собой строку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...