0

「gcc-4.3.2」と「C」を抽出したい次の文字列があります

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

smart_str()を試しましたが、出力は次のとおりです。

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

今私はsplit( "")をしました

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

それから私は試しました

smart_str(tokens [0])ですが、同じことがわかります

"u'gcc-4.3.2'"

それからgcc-4.3.2を抽出するにはどうすればよいですか?

(他の値についても実行したいので、ハードコードしたくない)

どんな助けもいただければ幸いです、

ありがとう、

パンカイ。

4

1 に答える 1

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"]、出力として終わらないようにします。

于 2012-04-08T13:22:04.920 に答える