2017-06-20 13 views
0

a。私は以下のような行を持っています:Pythonで文字列を一致させた後にすべての文字列を表示する方法

HELLO CMD-LINE: hello how are you -color blue how is life going -color red,green life is pretty -color orange,violet,red 

b。 -colorの後に文字列を印刷したかったのです。

c。私は、以下のREG EXP方法、

for i in range (len(tar_read_sp)): 
print tar_read_sp[i] 
wordy = re.findall(r'-color.(\w+)', tar_read_sp[i], re.M|re.I|re.U) 
# print "%s"%(wordy.group(0)) 
if wordy: 
    print "Matched" 
    print "Full match: %s" % (wordy) 
    print "Full match: %s" % (wordy[0]) 
    # wordy_ls = wordy.group(0).split('=') 
    # print wordy_ls[1] 
    # break 
else: 
    print "Not Matched" 

を試してみましたが、それは ['blue', 'red', 'orange']、のような文字列の後に最初の単語だけマッチングを印刷します。

c。しかし、どのように文字列を一致させた後にすべての文字列を印刷するのですか ['blue', 'red', 'green', 'orange', 'violet']のように繰り返し変数を削除しますか?

コメントと提案をお送りください。

+0

はあなたのインデントを修正してみてください..... ' (?: - color。((?:\ w + ,??)+)) 'を実行し、' split() 'を使用します。 – depperm

答えて

0

deppermと同意:インデントを修正してください。

彼の正規表現の提案を使用し、必要に応じて分割し、デデュープと組み合わせること、および再注文リストを:

あなたが尋ねたように、少なくとも(あなたに平らに、独自のリストを与える必要があります
wordy = re.findall(r'(?:-color.((?:\w+,?)+))', test_string, re.M|re.I|re.U) 
wordy = list({new_word for word in wordy for new_word in word.split(',')})[::-1] 

私はそれがあなたが "反復変数を削除する"ことを意味するものと仮定します)。

0

私の個人的な好みは、このような何かをするだろう:

import re 

tar_read_sp = "hello how are you -color blue how is life going -color red,green life is pretty -color orange,violet,red" 

wordy = re.findall(r'-color.([^\s]+)', tar_read_sp, re.I) 

big_list = [] 
for match in wordy: 
    small_list = match.split(',') 
    big_list.extend(small_list) 

big_set = list(set(big_list)) 
print (big_set) 

私が読んで、道を更新することが少し楽にこのアプローチを見つけます。アイデアは、すべての色の一致を取得し、それらの大きなリストを構築し、それを重複除外するように設定します。私が使用している正規表現:

-color ([^\s])+ 

次のスペースの色の 'small_list'をキャプチャします。

0

正規表現を使用しない解決策があります。

test_string = 'hello how are you -color blue how is life going -color red,green life is pretty -color orange,violet,red' 
result = [] 
for colors in [after_color.split(' ')[1] for after_color in test_string.split('-color')[1:]]: 
    result = result+colors.split(',') 
print result 

結果は次のとおりです。 [ '青'、 '赤'、 '緑'、 'オレンジ'、 '紫'、 '赤']

関連する問題