2017-10-30 5 views
0

私は、エラーコードのリストを持っており、これらのコードの一つがある:Pythonは^をsplit()の空白として扱っていますか?

Dial code generated note %d on stn ^char, cct %d^cct_chk^cct_chk 

%^または$シンボルが可変であると私は<*>とそれらの変数全体用語を交換する必要が含まれている任意の用語。

Dial code generated note <*> on stn <*> cct <*> 

は私が書かれているこれを行うには:

したがって、上記の行は次のようになります。

message = "Dial code generated note %d on stn ^char, cct %d^cct_chk^cct_chk" 
for term in message.split(): 
    if '^' in term: 
     message = message.replace(term, '<*>') 
    if '$' in term: 
     message = message.replace(term, '<*>') 
    if '%' in term: 
     message = message.replace(term, '<*>') 
print (message) 

ほとんどのメッセージの場合、これが働いているようです。しかし、この例のために私が取得しています:それはちょうど空白のような^を扱っているかのように

>>Dial code generated note <*> on stn <*> <*> <*>^<*>_chk^<*>_chk 

これは、表示されますそれ以外の場合は全体の最後の項は<*>に置き換えされている必要があります。 誰かが私にこの理由を教えてもらえますか?

+1

あなたは既にました'%d'のすべてを' <*> 'に置き換えました。最後の言葉になる頃には、もうスプリットバージョンではなくなりました。短い答え:いいえ、そうではありません。しかし、あなたの出力はあなたが投稿したコードとはまったく一致しません。 – jonrsharpe

+0

ああ。あなたは私が後の出力を与えるので、私はその場合にそれを修正する方法を知っていますか? –

+0

あなたのサンプルコードを使用して、私はあなたの出力例とは違う 'dial dial code note <*> stn <*> cct <*>^cct_chk^cct_chk'を取得します。 –

答えて

1

replace交換回数を制限することができるようにする三番目のパラメータを持っています。場合によっては、置換文字列が2回以上使用されているために問題が発生します。%dが最後の単語に置き換えられます。

簡単な修正は1に置換の数を制限することです:

message = "Dial code generated note %d on stn ^char, cct %d^cct_chk^cct_chk" 
for term in message.split(): 
    if '^' in term: 
     message = message.replace(term, '<*>', 1) 
    if '$' in term: 
     message = message.replace(term, '<*>', 1) 
    if '%' in term: 
     message = message.replace(term, '<*>', 1) 
print (message) 

ところで、ちょうど各反復でtermmessageを印刷すると、エラーが明らかになりましたでしょう...

2

あなたが好きな作品分割し、再び組み立てることができます。

message = "Dial code generated note %d on stn ^char, cct %d^cct_chk^cct_chk" 

message = ' '.join('<*>' if any(item in term for item in '^$%') 
        else term for term in message.split()) 
print(message) 

を出力:

Dial code generated note <*> on stn <*> cct <*> 
関連する問題