2016-09-05 7 views
-1

文字を(LISTまたはSTRING内で)定義し、他の文字を..に置き換えるにはどうすればいいですか?文字列内の未知の文字を置換するPython 2.7

例:

strinput = "abcdefg#~" 
legal = '.,/?~abcdefg' #legal characters 
while i not in legal: 
    #Turn i into '?' 
print output 
+1

あなたが気にする文字はASCII以外のものになりますか? –

+0

"私の質問は、どのように(LISTまたはSTRING内の)文字を定義し、他の文字を..に置き換えることができますか?あなたがこのような簡単なアプローチをとるなら、dictのための素晴らしい仕事のように思えます。未定義? 'KeyError'をキャッチし、それを処理します。 –

+0

私が使用できない文字がわからない場合、どうすれば辞書を使うことができますか? @ Two-BitAlchemist – Cyanite

答えて

4

文字列の各文字をテストするためにinを使用し、その後セット内の正当な文字を入れてください。 str.join()メソッドとconditional expressionメソッドを使用して新しい文字列を作成します。

>>> s = "test.,/?~abcdefgh" 
>>> legal = set('.,/?~abcdefg') 
>>> s = ''.join(char if char in legal else '?' for char in s) 
>>> s 
'?e??.,/?~abcdefg?' 
>>> 
1

これはチャンクを読み込む大きなファイル、で、以下のようにre.sub(..)を適用した場合。クラス(角括弧)内の^が(「以外」を言ってと同様に)否定を意味

>>> import re 
>>> char = '.,/?~abcdefg' 
>>> re.sub(r'[^' + char +']', '?', "test.,/?~abcdefgh") 
'?e??.,/?~abcdefg?' 
+0

申し訳ありませんが、私はファイルを直接編集するのではなく、代わりにコンテンツを文字列に保存することを忘れていました。私は私の質問を編集しました。 – Cyanite

+2

StackOverflowに関するここでの回答はすべて一般的です。私はあなたが 're.sub(..)'のアイディアをもっと引き出すことができると確信しています。 – SuperSaiyan

+0

@AustinSmith - これは必要なものを実現します。 – wwii

関連する問題