string - 在Python,从字符串中删除特定字符

我正在尝试使用python从字符串中删除特定字符,这是我现在使用的代码,不幸的是,它似乎对字符串没有作用。


for char in line:
 if char in" ?.!/;:":
 line.replace(char,'')

如何正确地执行这个操作?

时间:

python中的字符串是不可变的(无法更改),因此line.replace(...)的效果就是创建一个新的字符串,而不是改变旧的字符串,

你可以改用str.translate


line = line.translate(None, '!@#$')

—仅适用于Python 26和更新的Python 2x版本*

或正则表达式替换为re.sub


import re
line = re.sub('[!@#$]', '', line)

括号内的字符构成一个字符类,line中的任何字符都将被第二个参数替换为sub : 空字符串。


*可以与早期的python兼容,你可以创建一个"null"来代替None :


import string
line = line.translate(string.maketrans('', ''), '!@#$')

这里string.maketrans用于创建转换表,它只是一个包含序号值0到255的字符的字符串。

我还没有开始使用Python 3,所以我不确定如何将它转换为Python 3.


调用unicode字符串的translate方法时,不能传递我们在上面使用的第二个参数,你也不能将None作为第一个参数传递,也不能传递到string.maketrans中的转换表,相反,你把字典作为唯一的参数,


translation_table = dict.fromkeys(map(ord, '!@#$'), None)
unicode_line = unicode_line.translate(translation_table)


{ord('!'): None, ord('@'): None, ...}


>>> str ="ab1cd1ef"
>>> str.replace("1","")
'abcdef'
>>>

把它放在一个循环里:


>>>
>>> a ="a!b@c#d$"
>>> b ="!@#$"
>>> for i in range(0,len(b)):
... a =a.replace(b[i],"")
...
>>> print a
abcd
>>>


line = line.translate(None," ?.!/;:")


>>> line ="abc#@!?efg12;:?"
>>> ''.join( c for c in line if c not in '?:!/;' )
'abc#@efg12'

对于只允许字符串中某些字符的反向要求,可以将正规表达式与集合complement运算符[^ABCabc]一起使用,例如,除ascii字母,数字和连字符以外的所有内容:


>>> import string
>>> import re
>>>
>>> phrase = ' There were"nine" (9) chick-peas in my pocket!!! '
>>> allow = string.letters + string.digits + '-'
>>> re.sub('[^%s]' % allow, '', phrase)

'Therewerenine9chick-peasinmypocket'

来自python正则表达式文档

不在某个范围内的字符可以通过对集合进行补充来匹配,如果集合的第一个字符为'^',则不会匹配集中的所有字符,例如,[^5]将匹配除'5'以外的字符,而[^^]将匹配除'^'以外的字符,如果^不是集合中的第一个字符,则它没有特殊含义。

和python中的大多数东西一样,答案比你想象中的要简单。


>>> line ="H E?.LL!/;O::" 
>>> for char in ' ?.!/;:': 
... line = line.replace(char,'') 
...
>>> print line
HELLO

你不必执行嵌套的if/for循环,但是你需要单独检查每个字符。

在python中字符串是不可变的,replace方法在替换后,返回一个新字符串,尝试以下方法:


for char in line:
 if char in" ?.!/;:":
 line = line.replace(char,'')


#!/usr/bin/python
import re

strs ="how^ much for{} the maple syrup? $20.99? That's[] ricidulous!!!"
print strs
nstr = re.sub(r'[?|$|.|!|a|b]',r' ',strs)#i have taken special character to remove but any #character can be added here
print nstr
nestr = re.sub(r'[^a-zA-Z0-9 ]',r'',nstr)#for removing special character
print nestr

这个怎么样:


def text_cleanup(text):
 new =""
 for i in text:
 if i not in" ?.!/;:":
 new += i
 return new

使用正则表达式概念。


ipstring ="text with symbols!@#$^&*( ends here"
opstring=''
for i in ipstring:
 if i.isalnum()==1 or i==' ':
 opstring+=i
 pass
print opstring

...