2017-08-02 5 views
0

はここに私の文字列です。私は最初に誰が の「最初の」賞の優勝者であるのかを判断し、その受取人を含む他のすべてのアイテムを引き出しようとしています。少し複雑な使用法は

この場合、最初の受信者の勝者が(マイケル)であり、 であるかどうかを確認して、マイケルを含むマイケルの名誉をすべて引き出します。

だから、結果は次のようなものでなければなりません:、私はルックアラウンドとともにrefrencingバック活用しようとしていた

「マイケル・ファースト:マイケル、第三:マイケル、アシスト::マイケル、得点」

これはあなたが正規表現でそれをやりたい(と私もそれを後で試すを与えるかもしれない)場合の対処するために素敵な「パズルトリビア」です - - しかし、それはので、少し厄介

import re 
string ='First: Michael, Second: Dennis, Third: Michael, \nAssists: Michael, Scoring: Michael, Rebounds: Peter, Steals: Dennis' 
re.findall('(?=First: (\w+)), (?=\w+: \w+,)|(\w+: \1,)+', string) 
+1

私は本当にあなたが別の行にそれを分割し、試合にその方法を取得すべきだと思います。 –

答えて

1

を得たが、allyou意志のすべての壊れやすいコードを持っています - あなたの入力データフォーマットが少し変わってもそれはうまくいかないでしょう。メンテナンスの悪夢。

"固定的な"方法:その文字列を選んで " - "で分割し、 ":"で各セグメントを分割し、各コンポーネントを取り除き、そこからPython辞書を作成します。そして、あなたの必要なデータを抽出するために辞書理解の表現を使用するのは簡単です:

def get_first_accolade(text): 
    parts = text.split(",") 
    data = {} 
    for item in parts: 
     key, value = item.split(",") 
     data[key.strip()] = value.strip() 
    result = {key: value for key, value in data.items() if value == data["first"]} 
    return result 
+0

これは私には役に立たなかった。 'ValueError:解凍するには1つ以上の値が必要です' –

+0

参照してください。私はREのグループ方法の1つでそれを行うエレガントな方法があることを望んでいました。 – Moondra

+0

おそらく可能です。それは、それに乗るためにチャレンジングを感じ、楽しいですが、私はそれが "エレガント"と呼ぶことができるとは思っていません:-) – jsbueno

関連する問題