有没有一种方法可以从Python中的字符串中查找和删除标点符号?

时间:2019-07-13 16:00:32

标签: python

我创建了一个函数,如果参数包含ascii.lowercase字符串(英文字母)中的每个字母,则返回一个布尔值。

在代码中,我使用一个for循环使用string模块方法string.whitespacestring.punctuation查找空格和标点的成员。

在测试for循环时,string.punctuation部分的特殊字符似乎与for循环提供的特殊字符不匹配。

请提供string.punctuation不能按计划运行的理由。

import string

def ispanagram(text, alphabet = string.ascii_lowercase):
    """Return boolean if argument is contains every letter in the ascii alphabet"""

    alphabet_list = list(alphabet)    
    letter_set = sorted(set(text.lower()))

    for char in letter_set:
        if char in string.whitespace or char in string.punctuation:
            letter_set.remove(char)

    return letter_set == alphabet_list


ispanagram("The quick brown !fox jumps over the lazy dog")

2 个答案:

答案 0 :(得分:3)

主要问题是您在迭代letter_set的同时对其进行了修改。这无法正常工作(explanation)。

要修复,请遍历副本:

for char in letter_set[:]:

答案 1 :(得分:0)

让我知道是否有帮助。

import string
import re

def ispanagram(text, alphabet = string.ascii_lowercase):
    """Return boolean if argument is contains every letter in the ascii alphabet"""

    alphabet_list = list(alphabet)

    # just remove all the special characters including space
    text_only_chars = re.sub(r"[-()\"#/@;:<>{}`+=~|.!?, ]", "", text)

    letter_set = sorted(set(text_only_chars.lower()))

    return letter_set == alphabet_list


print(ispanagram("The quick brown !fox jumps over the lazy dog"))

#### Output ####
True