python删除字符串中指定字符的方法
最近开始学机器学习,学习分析垃圾邮件,其中有一部分是要求去除一段字符中的标点符号,查了一下,网上的大多很复杂例如这样
importre temp="司法局让我和户15.80.!!??客户维护户外" temp=temp.decode("utf8") string=re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+".decode("utf8"),"".decode("utf8"),temp) printstring
或者是这样的
'''引入string模块''' importstring '''使用标点符号常量''' string.punctuation text="*/@》--【】--12()测试*()" '''去除字符串中所有的字符,可增加自定义字符''' defstrclear(text,newsign=''): importstring#引入string模块 signtext=string.punctuation+newsign#引入英文符号常量,可附加自定义字符,默认为空 signrepl='@'*len(signtext)#引入符号列表长度的替换字符 signtable=str.maketrans(signtext,signrepl)#生成替换字符表 returntext.translate(signtable).replace('@','')#最后将替换字符替换为空即可 strclear(text,'》【】')
我一开始用的后面的这个,着实是有点暴力,于是找了查了一下原文档,发现python3中完全有更好的方法去实现这样的功能(似乎是新更新的?不太清楚,我的是python最新版本3.6.6)
和上面的方法一样是利用的是str的translate()和maketrans()
translate()自然不用说这里的重点是maketrans(),先放上官方的文档
staticstr.maketrans(x[,y[,z]]) Thisstaticmethodreturnsatranslationtableusableforstr.translate(). Ifthereisonlyoneargument, itmustbeadictionarymappingUnicodeordinals(integers)orcharacters(stringsoflength1)toUnicodeordinals, strings(ofarbitrarylengths)orNone.Characterkeyswillthenbeconvertedtoordinals. Iftherearetwoarguments, theymustbestringsofequallength, andintheresultingdictionary, eachcharacterinxwillbemappedtothecharacteratthesamepositioniny. Ifthereisathirdargument,itmustbeastring,whosecharacterswillbemappedtoNoneintheresult.
可以看出maketrans是可以放三个参数的(以前一直以为只有两个....)
前两个参数是需要一一对应进行替换,需要字符串长度相同
第三个参数是直接替换为None
这里就直接上代码了
importstring i='Hello,howareyou!' i.translate(str.maketrans('','',string.punctuation)) >>>'Hellohowareyou' i='helloworldiamli' i.translate(str.maketrans('','','l')) >>>'heowordiami'
这里的string.punctuation是python内置的标点符号的合集
既然看到了就总结下
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。