[英]Replace special characters in a string in 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)
一种方法是使用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\\.]
str.replace 是你想要做的错误的功能(除了它被错误地使用)。 您想用空格替换集合中的任何字符,而不是用单个空格替换整个集合(后者就是 replace 所做的)。 您可以像这样使用翻译:
removeSpecialChars = z.translate ({ord(c): " " for c in "!@#$%^&*()[]{};:,./<>?\|`~-=_+"})
这将创建一个映射,将特殊字符列表中的每个字符映射到一个空格,然后在字符串上调用 translate(),用空格替换一组特殊字符中的每个单个字符。
您需要在z
而不是str
上调用replace
,因为您要替换字符串变量z
中的字符
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
但这不起作用,因为替换查找子字符串,您很可能需要将正则表达式模块re
与sub
函数一起使用:
import re
removeSpecialChars = re.sub("[!@#$%^&*()[]{};:,./<>?\|`~-=_+]", " ", z)
不要忘记[]
,它表示这是一组要替换的字符。
替换对特定字符串进行操作,因此您需要像这样调用它
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
但这可能不是您需要的,因为这将查找包含所有相同顺序的字符的单个字符串。 正如 Danny Michaud 指出的那样,您可以使用正则表达式来做到这一点。
作为旁注,您可能想要寻找BeautifulSoup ,它是一个用于解析凌乱的 HTML 格式文本的库,就像您通常从 scaping 网站获得的一样。
您可以用所需的字符替换特殊字符,如下所示,
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)
翻译似乎更快:
N=100000,30个特殊字符,字符串长度=70
替换:0.3251810073852539 re.sub:0.2859320640563965 翻译:0.12320685386657715
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.