我试图使用Python从字符串中删除特定字符。这是我现在使用的代码。不幸的是,它似乎对字符串没有做任何事情。

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

我如何正确地做到这一点?


当前回答

对于只允许字符串中某些字符的相反要求,可以使用带有集补操作符[^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'以外的任何字符,[^^]将匹配除 “^”。的第一个字符没有特殊意义 集。

其他回答

我是不是错过了重点,或者仅仅是以下几点:

string = "ab1cd1ef"
string = string.replace("1", "") 

print(string)
# result: "abcdef"

把它放入循环:

a = "a!b@c#d$"
b = "!@#$"
for char in b:
    a = a.replace(char, "")

print(a)
# result: "abcd"
>>> line = "abc#@!?efg12;:?"
>>> ''.join( c for c in line if  c not in '?:!/;' )
'abc#@efg12'
line = line.translate(None, " ?.!/;:")

下面一个. .没有使用正则表达式的概念..

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

这个怎么样:

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