在Python中将字符串拆分为多个字符串

时间:2013-07-29 21:55:36

标签: python python-3.x

嘿大家我试图想办法改变像这样的字符串(在python3中)

"<word>word</word>" 

分为三个字符串

"<word>" "word" "</word>" 

我要列入一个清单。

首先我尝试了strip()命令,但它只删除了字符串的开头和结尾。然后我尝试了一种更复杂的方法,一次一个字母地阅读文本,构建单词,并在任何“&gt;”之后添加“”。使用IF语句,但我无法弄清楚如何在另一个“&lt;”之前添加一个空格。

将这些词分开是一种简单的方法吗?

编辑:这不是我的所有数据,我正在读取xml文件并使用堆栈类来确保文件是平衡的。

<word1></word1> <word2>worda</word2> <word3>wordb</word3> <word4></word4>...

Edit2:感谢大家的所有答案!如果可以的话,我会投票给你所有的答案。对于实际使用,xml解析器确实工作正常,但对于我需要的正则表达式命令工作得很好。谢谢!

3 个答案:

答案 0 :(得分:2)

您应该使用xml解析器。以下是解析的示例,

>>> import xml.etree.ElementTree as ET
>>> xml = '<root><word1>my_word_1</word1><word2>my_word_2</word2><word3>my_word_3</word3></root>';
>>> tree = ET.fromstring(xml);
>>> for child in tree:
...     print child.tag, child.text
...
word1 my_word_1
word2 my_word_2
word3 my_word_3
>>>

一旦读取了值,就很容易将它们推入堆栈中。

答案 1 :(得分:1)

我相信您正在寻找拆分方法。

input.split(">")

分割后,您可能需要重新添加尖括号。 这取决于你是否总是处于这种模式。

如果您的输入遵循变量模式,那么使用库可能会更好。

http://docs.python.org/2/library/htmlparser.html

答案 2 :(得分:1)

使用字符串replace方法的正则表达式:

>>> import re
>>> s = "<word1></word1> <word2>worda</word2> <word3>wordb</word3> <word4></word4>"
>>> re.findall("\S+", s.replace(">", "> ").replace("<", " <"))
['<word1>', '</word1>', '<word2>', 'worda', '</word2>', '<word3>', 'wordb', '</word3>', '<word4>', '</word4>']
>>>

或者,不使用正则表达式的替代解决方案:

>>> s = "<word1></word1> <word2>worda</word2> <word3>wordb</word3> <word4></word4>"
>>> s.replace(">", "> ").replace("<", " <").split()
['<word1>', '</word1>', '<word2>', 'worda', '</word2>', '<word3>', 'wordb', '</word3>', '<word4>', '</word4>']
>>>

Regex解决方案允许更多地控制匹配(您可以在表达式中添加更多内容以真正地缩小它)。

但请注意,只有数据与给定的示例类似,这些才有效。