在 Python 中替换字符串中的特殊字符

新手上路,请多包涵

我正在使用 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)

原文由 user2363217 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 753
2 个回答

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

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

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

原文由 rassahah 发布,翻译遵循 CC BY-SA 3.0 许可协议

一种方法是使用 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\.]

原文由 Kobi K 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题