替换字符串python中的特殊字符

时间:2014-06-02 13:47:27

标签: python string list replace urllib

我正在使用urllib从网站获取一串html,并且需要将html文档中的每个单词放入一个列表中。

这是我到目前为止的代码。我一直在收到错误。我也复制了下面的错误。

import urllib.request

url = input("Please enter a URL: ")

z=urllib.request.urlopen(url)
z=str(z.read())
removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")

words = removeSpecialChars.split()

print ("Words list: ", words[0:20])

这是错误。

Please enter a URL: http://simleyfootball.com
Traceback (most recent call last):
  File "C:\Users\jeremy.KLUG\My Documents\LiClipse Workspace\Python Project 2\Module2.py", line 7, in <module>
    removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
TypeError: replace() takes at least 2 arguments (1 given)

5 个答案:

答案 0 :(得分:35)

一种方法是使用re.sub,这是我的首选方式。

import re
my_str = "hey th~!ere"
my_new_string = re.sub('[^a-zA-Z0-9 \n\.]', '', my_str)
print my_new_string

<强>输出:

hey there

另一种方法是使用re.escape

import string
import re

my_str = "hey th~!ere"

chars = re.escape(string.punctuation)
print re.sub(r'['+chars+']', '',my_str)

<强>输出:

hey there

关于PEP-8参数的python中参数样式的一个小提示应该是remove_special_chars而不是removeSpecialChars

此外,如果您想要保持空格,只需将[^a-zA-Z0-9 \n\.]更改为[^a-zA-Z0-9\n\.]

答案 1 :(得分:20)

str.replace是你想要做的错误的功能(除了它被错误地使用)。您希望用空格替换集合中的任何字符,而不是用单个空格替换整个集合(后者是替换的)。您可以像这样使用翻译:

removeSpecialChars = z.translate ({ord(c): " " for c in "!@#$%^&*()[]{};:,./<>?\|`~-=_+"})

这会创建一个映射,将特殊字符列表中的每个字符映射到一个空格,然后在字符串上调用translate(),用空格替换特殊字符集中的每个字符。

答案 2 :(得分:3)

您需要在replace而非z上致电str,因为您要替换字符串变量z中的字符

removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")

但这不起作用,因为替换查找子字符串,您很可能需要使用带有re函数的正则表达式模块sub

import re
removeSpecialChars = re.sub("[!@#$%^&*()[]{};:,./<>?\|`~-=_+]", " ", z)

不要忘记[],这表示这是一组要替换的字符。

答案 3 :(得分:2)

replace对特定字符串进行操作,因此您需要像这样调用它

removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")

但这可能不是您所需要的,因为这将查找包含相同顺序的所有字符的单个字符串。 Danny Michaud指出,你可以用正则表达式做到这一点。

作为附注,您可能希望查找BeautifulSoup,这是一个用于解析凌乱的HTML格式文本的库,就像您通常从scaping网站获得的那样。

答案 4 :(得分:0)

您可以使用所需的字符替换特殊字符,如下所示

import string
specialCharacterText = "H#y #@w @re &*)?"
inCharSet = "!@#$%^&*()[]{};:,./<>?\|`~-=_+\""
outCharSet = "                               " #corresponding characters in inCharSet to be replaced
splCharReplaceList = string.maketrans(inCharSet, outCharSet)
splCharFreeString = specialCharacterText.translate(splCharReplaceList)