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

use*_*217 15 python string replace list 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])
Run Code Online (Sandbox Code Playgroud)

这是错误.

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)
Run Code Online (Sandbox Code Playgroud)

Kob*_*i K 47

一种方法是使用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
Run Code Online (Sandbox Code Playgroud)

输出:

hey there
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用re.escape:

import string
import re

my_str = "hey th~!ere"

chars = re.escape(string.punctuation)
print re.sub(r'['+chars+']', '',my_str)
Run Code Online (Sandbox Code Playgroud)

输出:

hey there
Run Code Online (Sandbox Code Playgroud)

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

此外,如果你想保留的空间只是改变[^a-zA-Z0-9 \n\.][^a-zA-Z0-9\n\.]

  • 非常有用的答案,但在最后一行,您不是说使用 [^a-zA-Z0-9\n\.] 会删除空格吗? (2认同)

小智 24

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

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

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

  • 非常适合“ord”使用!否则 str.translate 对特殊字符不执行任何操作。 (2认同)

小智 8

您需要调用replaceonz而不是 on str,因为您想要替换位于字符串变量中的字符z

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

但这是行不通的,因为替换会查找子字符串,您很可能需要将正则表达式模块re与该sub函数一起使用:

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

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