2012-04-08 10 views
0

I Iが "GCC-4.3.2" および "C"はDjangoのUnicodeエンコーディングから文字列を抽出

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

Iは、(smart_str試み)を抽出したいから次の文字列を有しており、出力は次

あります今、私が分割なかった
"u'gcc-4.3.2' u'C'" 

(」「)

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

は、その後、私は

を試してみました

smart_str(トークン[0])が、それは、私はそれからのgcc-4.3.2を抽出するにはどうすればよい

"u'gcc-4.3.2'" 

私に同じことを与えますか?

(私は私がしたいの打ちいけないので、他の値のためにそれをやってみたい)

すべてのヘルプは、

おかげで、

パンカジをいただければ幸いです。

+0

どのように二重引用符で囲まれた文字列を最初に取得しましたか?あなたが最初にそれを修正する必要があるように思えます。 –

+0

あなたは '' str(x) ''が必要なときに '' repr(x) ''を得ているようです。 –

答えて

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' 

、私が最初にそこに行くとそれを扱うでしょう。

警告:あなたはあなたが取得しているデータを制御することはできません場合は

>>> 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)の値は次のとおりです。UnicodeはあなたがUnicode文字を持っている場合、あなたが問題に実行することができ、その理由のために異なっていますあなたは評価できる表現:

>>> 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"]に終わらないことを保証するために、操作を非貪欲にするために.*?を使用します。

+0

最後に、それは働いた。どうもありがとう :) –

関連する問題