Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I'm looking for the shortest neatest way to code the folloing.

say I have a string containing: 'the f<ox jumpe>d over the l<azy> dog <and the >fence'

Using < as the opening tag and > as the closing tag, I would like to save everything inbetween into a list.

if saved into list1, list1 would equal ['ox jumpe', 'azy', 'and the ']

Who knows of a nice, neat SHORT way to do this.

Thanks!

share|improve this question
show 1 more comment

2 Answers

up vote 3 down vote accepted

Regular expressions should do the trick here:

import re

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

print list

Edit:

You can read more about regex here

Mainly, what the regex from above does is:

.*? - non greedy match of all the characters until next wanted char

\< - matches the < char

(.*?) - non greedy match of all the characters until next wanted char, capture and returns them

share|improve this answer
add comment

Assuming every "<" and every ">" indicate the start or end of a tag e.g. you cant have <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']

use izip if it is a large xml file to save memory (Although x[i+1:j] would need to be changed as you wouldn't want the whole file as a string).

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.
{"cc_re__cc_re__cc_by_sa_3_0": ["        <li><a href=\"http://area51.stackexchange.com\" title=\"proposing new sites in the Stack Exchange network\">Area 51</a></li>\r\n                        <li><a href=\"http://careers.stackoverflow.com\">Stack Overflow Careers</a></li>\r\n                    \r\n                </ol>\r\n            </td>\r\n    </tr>\r\n</table>\r\n                </div>\r\n            </div>\r\n\r\n            <div id=\"copyright\">\r\n                site design / logo &#169; 2014 stack exchange inc; user contributions licensed under <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\" rel=\"license\">cc by-sa 3.0</a> \r\n                with <a href=\"http://blog.stackoverflow.com/2009/06/attribution-required/\" rel=\"license\">attribution required</a>\r\n            </div>\r\n            <div id=\"svnrev\">\r\n                rev 2014.4.16.1551\r\n            </div>\r\n            \r\n        </div>\r\n    </div>\r\n    <noscript>\r\n        <div id=\"noscript-warning\">Stack Overflow works best with JavaScript enabled<img src=\"http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif\" alt=\"\" class=\"dno\"></div>\r\n    </nos"], "copyright__copyright__copyright": ["\n>>> ends=(i for i,c in enumerate(x) if c==\">\")\n>>> ans=[x[i+1:j] for i,j in zip(starts,ends)]\n>>> ans\n['a', 'bb', 'ccc']\n\nuse izip if it is a large xml file to save memory (Although x[i+1:j] would need to be changed as you wouldn't want the whole file as a string).\n\nshare|improve this answer\nadd comment\n\nYour Answer\n\n\u00a0\ndiscard\n\nBy posting your answer, you agree to the privacy policy and terms of service.\n\nNot the answer you're looking for? Browse other questions tagged or ask your own question."]}