我有一个unicode数组,我想将其转换为数组。给定输入格式和输出格式如下:
p = u'(abcd, pqrs, fghj, mjki, loki)'
我想要输出如下:
output = ('abcd', 'pqrs', 'fghj', 'mjki', 'loki')
p = u'(abcd, pqrs, fghj, mjki, loki)'
output = [x.strip() for x in p.strip("(").strip(")").split(",")]
print(output)
这将保留unicode:
[u'abcd', u'pqrs', u'fghj', u'mjki', u'loki']
很脏的方式,但是:
>>> tuple(u'(abcd, pqrs, fghj, mjki, loki)'[1:-1].split(', '))
('abcd', 'pqrs', 'fghj', 'mjki', 'loki')
p = tuple(p[1:-1].split(', '))
因此,我认为您可以在使用前改进输入数据。
由于它看起来几乎像许多可用的YAML语法之一,我建议将其修补为正确的YAML,然后使用正确的YAML解析器:
import yaml
p = u'(abcd, pqrs, fghj, mjki, loki)'
print(yaml.load('[' + p[1:-1] + ']'))
要么
print(yaml.load(p.replace('(', '[').replace(')', ']')))
这样,嵌套结构(如果它们出现)也将被正确解析。
为了获得更好的性能(如果结构很大),您甚至可以考虑这个:p.translate({40:91, 41:93})
将括号翻译成括号。
您可以预先用空字符串replace()
括号,用逗号','
分割字符串,并使用str.strip
对每个元素应用map()
:
p = u'(abcd, pqrs, fghj, mjki, loki)'
print(tuple(map(str.strip, p.replace('(', '').replace(')','').split(','))))
哪个输出:
('abcd', 'pqrs', 'fghj', 'mjki', 'loki')
你可以使用re.findall
:
import re
p = u'(abcd, pqrs, fghj, mjki, loki)'
data = tuple(map(str, re.findall('[a-zA-Z]+', p)))
输出:
('abcd', 'pqrs', 'fghj', 'mjki', 'loki')