繁体   English   中英

Django从unicode编码中提取字符串

[英]Django extract string from unicode encoding

我有以下字符串,我想从中提取“gcc-4.3.2”和“C”

u"u'gcc-4.3.2' u'C'"

我尝试了smart_str(),输出如下

"u'gcc-4.3.2' u'C'"

现在我做了分裂(“”)

tokens = ["u'gcc-4.3.2'", "u'C'"]

然后我试了一下

smart_str(tokens [0]),但它给了我同样的东西

"u'gcc-4.3.2'"

如何从中提取gcc-4.3.2?

(我想为其他值做这个,所以我不想硬编码)

任何帮助,将不胜感激,

谢谢,

潘卡。

你真正的问题似乎是你得到一个值而不是值的表示。

>>> x = u"gcc-4.3.2"
>>> x
u'gcc-4.3.2'
>>> repr(x)
"u'gcc-4.3.2'"
>>> str(x)
'gcc-4.3.2'

如果您对从中获得价值的地方有任何控制权,我会先去那里处理。

警告:由于某种原因,Unicode是不同的,如果您有unicode字符,则可能遇到问题:

>>> x = u"ĝĝ"
>>> x
u'\u011d\u011d'
>>> repr(x)
"u'\\u011d\\u011d'"
>>> str(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

如果您无法控制所获得的数据,则repr(x)的值是您可以评估的表达式:

>>> x = "u'gcc-4.3.2'"
>>> eval(x)
u'gcc-4.3.2'

但是,请注意, 由于多种原因 ,eval 非常不安全

如果你想更安全地处理unicode字符串,你可以这样做:

>>> import re
>>> x = "u'gcc-4.3.2' u'C'"
>>> re.findall("u'(.*?)'", x)
['gcc-4.3.2', 'C']

在这里,我们使用正则表达式来提取包含在u''中的字符串中的任何内容。 我们用.*? 使操作不贪婪,确保我们不以["gcc-4.3.2' u'C"]作为我们的输出结果。

暂无
暂无

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

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