从单词中删除特殊字符

时间:2018-06-20 07:40:11

标签: python string replace char

我正在尝试计算长字符串中的单词频率。我已经使用string.split()方法将字符串拆分为单词列表,并在拆分长字符串之前通过应用string.lower()删除了区分大小写的字符。我想删除一些特殊字符,例如“!”,“:”,“。”。因为这些字符会弄乱字数。下面是我编写的函数,但似乎无法正常工作

def clean_word(word):
    replace_list = [':','.',',','!','?']
    s = list(word)
    for i in s:
        for j in replace_list:
            if i == j:
                i=""
print(s) # to see s before it being joined           
word =''.join(s)
return word
print(clean_word('Hello!'))

结果是:

['H','e','l','l','o','!']

你好!

我想知道为什么“!”还没有被替换为“”?我确实在代码行中放了一个测试代码,它显示了比较效果。

   if i == j:
       print('Checked')

4 个答案:

答案 0 :(得分:3)

使用enumerate

def clean_word(word):
    replace_list = [':','.',',','!','?']
    s = list(word)
    for i, x in enumerate(s):
        if x in replace_list:
            s[i] = ""     
    word = ''.join(s)
    return word

print(clean_word('Hello!'))

# Hello

如果您对列表理解感兴趣:

word = 'Hello!'
replace_list = [':','.',',','!','?']

print(''.join([x for x in word if x not in replace_list]))
# Hello

答案 1 :(得分:0)

可以更轻松地解决它:

def clean_word(word):
    replace_list = [':','.',',','!','?']
    for i in replace_list:
        word = word.replace(i,"")
    return word

print(clean_word('Hello!'))

代码错误:在您的代码中,您正在编写i="",它将更改变量i的值,而不是原始字符串。

答案 2 :(得分:0)

def clean_word(word):
    replace_list = [':','.',',','!','?']
    new_word = ''
    for x in word:
        if x not in replace_list:
            new_word += x     
    return new_word
print(clean_word('Hello!'))

输出

Hello

答案 3 :(得分:0)

您应该使用列表理解功能,更快,更干净:

replace_list = [':','.',',','!','?']

word = "H:e.l,l!o?"

print ''.join([c for c in word if c not in replace_list]) #OUTPUTS: Hello