我正在尝试在 python 中解析以下两个字符串:
这是第一个字符串
s1="< one > < two > < three > here's one attribute < six : 10.3 > < seven : 8.5 > < eight : 90.1 > < nine : 8.7 >"
我需要一个 re 以便我可以将上面的内容拆分并存储在这样的列表中,其中下面新行中的每个项目都是列表中特定索引处的元素:
0 one
1 two
2 three
3 here's one attribute
4 six : 10.3
5 seven : 8.5
6 eight : 90.1
7 nine : 8.7
这是第二个字符串
s2="<one><two><three> an.attribute ::"
同样,我需要存储在这样的列表中的项目:
0 one
1 two
2 three
3 an.attribute
这是我到目前为止所尝试的,这是我从我在 Stack Overflow 上发布的另一个问题中得到的答案。
res = re.findall('< (.*?) >', s1)
pprint(res)
index=0
for index in res:
print index
但这会跳过“这是一个属性”
输出:
['one', 'two', 'three', 'six : 10.3', 'seven : 8.5', 'eight : 90.1', 'nine : 8.7']
one
two
three
six : 10.3
seven : 8.5
eight : 90.1
nine : 8.7
谁能帮帮我?=)
如果有人知道如何从第一个字符串中提取 10.3、8.5、90.1 和 8.7 等字符串中的数值,那也太好了 =)
编辑:邓肯我试过你的代码,但我似乎没有得到我应该得到的输出。我假设我在某处犯了某种错误。你能告诉我它是什么吗?
from __future__ import generators
from pprint import pprint
s2="<one><two><three> an.attribute ::"
s1="< one > < two > < three > here's one attribute < six : 10.3 > < seven : 8.5 > < eight : 90.1 > < nine : 8.7 >"
def parse(s):
for t in s.split('<'):
for u in t.strip().split('>',1):
if u.strip(): yield u.strip()
list(parse(s1))
list(parse(s2))
pprint(s1)
pprint(s2)
这是我得到的输出:
"< one > < two > < three > here's one attribute < six : 10.3 > < seven : 8.5 > < eight : 90.1 > < nine : 8.7 >"
'<one><two><three> an.attribute ::'