嘿大家我试图想办法改变像这样的字符串(在python3中)
"<word>word</word>"
分为三个字符串
"<word>" "word" "</word>"
我要列入一个清单。
首先我尝试了strip()命令,但它只删除了字符串的开头和结尾。然后我尝试了一种更复杂的方法,一次一个字母地阅读文本,构建单词,并在任何“&gt;”之后添加“”。使用IF语句,但我无法弄清楚如何在另一个“&lt;”之前添加一个空格。
将这些词分开是一种简单的方法吗?
编辑:这不是我的所有数据,我正在读取xml文件并使用堆栈类来确保文件是平衡的。
<word1></word1> <word2>worda</word2> <word3>wordb</word3> <word4></word4>...
Edit2:感谢大家的所有答案!如果可以的话,我会投票给你所有的答案。对于实际使用,xml解析器确实工作正常,但对于我需要的正则表达式命令工作得很好。谢谢!
答案 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(">")
分割后,您可能需要重新添加尖括号。 这取决于你是否总是处于这种模式。
如果您的输入遵循变量模式,那么使用库可能会更好。
答案 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解决方案允许更多地控制匹配(您可以在表达式中添加更多内容以真正地缩小它)。
但请注意,只有数据与给定的示例类似,这些才有效。