我有以下字符串,我想从中提取“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?
(我想为其他值做这件事,所以我不想硬编码)
任何帮助将不胜感激,
谢谢,
的Pankaj。
答案 0 :(得分: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为highly unsafe for a number of reasons。
如果你想更安全地处理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"]
作为输出。