2012-01-26 9 views
3

私は問題のビットを抱えているやあみんな、私はそれらの一つは、今、私は例Pythonは%記号を交換しない

li = "this is() stuff %" 
li.replace('()%', ' ') 
としてこれを使用しています%記号である文字列内のシンボルを交換する必要が

私は%を奪うと、そこに他の文字を残す場合は代わりに私が

li = "this is() stuff %" 
li.replace('%', ' ') 

をすれば、それはその後、%記号は何の問題を置き換えません取得し、まったく何を交換doesntの、彼らはまた、すべてを交換します、などすぐに私がそこに置くと、すべてが機能しません。 奇妙なことは、私は別のマシンで試したということで、それは何の問題も働かない、それは本当に奇妙だ

のpythonに2.5.2

おかげ

答えて

7

ところで、それは問題は、最初の引数の唯一の完全マッチを置き換えるstr.replaceあるstring.translate

import string 
table = string.maketrans('()%', ' ') 
li = string.translate(li, table) 
+0

ありがとうございました。まさに私が探していたものです:D – merlin371

7

replaceマッチを使用していますし、を置き換えます第1引数に第2引数を指定します。

>>> 'abc'.replace('ab', '!') 
'!c' 
>>> 'abc'.replace('abd', '!') 
'abc' 
3

であなたの問題を解決するのは簡単です。正規表現を使って何を行うことができますしたい:

import re 
li = "this is() stuff %" 
li = re.sub('[()%]', ' ', li) 
2
li = "this is() stuff %" 
li.replace('()%', ' ') 

は、なぜあなたはこれが何を行うことを期待しますか?文字列"()%"は元の文字列には表示されません。

また、交換の結果をliに割り当てないことで捨ててしまいます。

for r in "()%": 
    li = li.replace(r, " ") 

ます。また、文字列のtranslateメソッドを使用することができます:あなたはスペースで文字のを交換したいと仮定すると、

は、あなたが望むものを、このようなものです。

from string import maketrans 
li = li.translate(maketrans("()%", " ")) 

それともそれはあなたが正規表現を学ぶことが必要、とあなたは、現時点でのPythonについて学ぶためにしようとしているとして、それがで取り組むには少しくらいかもしれませんが、あなたはまた、正規表現を使用することができます同時。

関連する問題