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内置的标点符号的合集
既然看到了就总结下
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。