繁体   English   中英

从Unicode字符串内的列表中提取信息

[英]Extract information from a list inside a unicode string

>>> myUnicode 
[u'[X: $1.11] [Y: $3.33] [Z 0/1000]']

我有一个包含上述^的Unicode字符串。 我正在尝试提取以下列表:

[X: $1.11] 
[Y: $3.33]

并将它们存储在单独的变量下。


我的尝试

我的想法是将myUnicode转换为列表并单独获取值。 我知道这是一个错误的尝试,但是很遗憾,我无法想到其他方法:

myUnicode = [myUnicode]
X = myUnicode[0]
Y = myUnicode[1]

但是出现以下错误:

IndexError: list index out of range

我的理想/预期输出

>>> X
X: $1.11

>>> Y
Y: $3.33

myUnicode列表仅包含1个条目 ,它是一个string ,要实现所需的功能,可以将其转换为字典,即:

import re
myUnicode = [u'[X: $1.11] [Y: $3.33] [Z 0/1000]']
matches = re.findall(r"\[(.*?):?\s(.*?)]", myUnicode[0])
final_dict = {}
for x in matches:
    final_dict[x[0]] = x[1]

您可以使用以下方式访问值:

print final_dict['X'], final_dict['Y'], final_dict['Z']
# $1.11 $3.33 0/1000

演示

您需要以某种方式解析数据。 使用正则表达式很容易抓住两个方括号之间的所有内容。 由于[是正则表达式的特殊字符,因此需要转义。 \\[([^\\]]+)将找到一个右括号,然后将所有内容组合到下一个右括号。 将它与re.findall一起re.findall ,您将获得所有的“列表”。 这段代码会将它们添加到模块的命名空间中

>>> import re
>>> myUnicode = [u'[X: $1.11] [Y: $3.33] [Z 0/1000]']
>>> for code in re.findall(ur'\[([^\]]+)', myUnicode[0]):
...     if u':' in code:
...         k, v = code.split(u':', 1)
...         globals()[str(k.strip())] = v.strip()
... 
>>> X
u'$1.11'
>>> Y
u'$3.33'

将它们放在全局名称空间中很奇怪(程序的其余部分如何知道添加了哪些名称),因此很危险。 非ascii变量或具有其他非法字符的变量不应放在此处。 您可以创建自己的字典来保存它们

>>> myvars = {}
>>> for code in re.findall(ur'\[([^\]]+)', myUnicode[0]):
...     if u':' in code:
...         k, v = code.split(u':', 1)
...         myvars[k.strip()] = v.strip()
... 
>>> myvars[u"X"]
u'$1.11'
>>> 

如果您想要此特定Output ,则可以遍历列表,然后使用[:]剪切字符串:

myunicode = [u'[X: $1.11] [Y: $3.33] [Z 0/1000]']
for data in myunicode:
    x =  data[1:8]
    y =  data[12:19]
    print x
    print y  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM