1

嘿大家我试图找出一种方法来改变这样的字符串(在python3中)

"<word>word</word>" 

分成三串

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

我要列一个清单。

起初我尝试了 strip() 命令,但它只去除字符串的开头和结尾。然后我尝试了一种更复杂的方法,一次一个字母地阅读文本,构建单词,并使用 IF 语句在任何“>”之后添加“”,但我不知道如何在其他“<”。

他们是拆分这些单词的简单方法吗?

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

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

Edit2:感谢大家的所有回答!如果可以的话,我会投票赞成你所有的答案。对于实际使用,xml 解析器确实可以正常工作,但对于我需要的 regex 命令可以完美运行。谢谢你!

4

3 回答 3

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
>>>

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

于 2013-07-29T22:37:43.597 回答
1

Regex with the replace method of a string works:

>>> 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>']
>>>

Or, an alternate solution that doesn't use Regex:

>>> 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>']
>>>

The Regex solution though allows for more control over the matching (you can add more to the expression to really curtomize it).

Note however that these will only work if the data is like the examples given.

于 2013-07-29T23:02:35.837 回答
1

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

input.split(">")

您可能需要在拆分后重新添加尖括号。这取决于你是否会一直处于这种模式。

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

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

于 2013-07-29T22:06:32.813 回答