如何在Python中提取小写元音/辅音?

2024-07-02 09:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

当我插入字符串“Character Extractor”时,提取元音的输出是“Chrctr Extrctr”,而辅音提取器的输出是“Caae Eao”。我想我把用户输入的字符串转换成了小写,但正如你看到的,大写字母没有被检查

每个项目的预期输出为“Chrctr xtrctr”和“aae Eao”。如何更改此设置以获得预期结果

奖金:我该如何用regex来代替呢

import tkinter as tk
import re

class CharacterExtractor:
    def __init__(self):
        self.mainWindow = tk.Tk()
        self.characterLabel = tk.Label(self.mainWindow, text = "Character Extracter")
        self.characterEntry = tk.Entry(self.mainWindow)
        self.vowelButton = tk.Button(self.mainWindow, text = "Extract Vowels", command = self.getVowels)
        self.consonantButton = tk.Button(self.mainWindow, text = "Extract Consonants", command = self.getConsonants)
        self.lettersValue = tk.StringVar()
        self.lettersValue.set("-")
        self.outputLabel = tk.Label(self.mainWindow, textvariable = self.lettersValue)
        self.characterLabel.pack()
        self.characterEntry.pack()
        self.vowelButton.pack()
        self.consonantButton.pack()
        self.outputLabel.pack()
        tk.mainloop()

    def getVowels(self):
        letters = str(self.characterEntry.get())
        vowels = ("a", "e", "i", "o", "u")
        for x in letters.lower():
            if x in vowels:
                letters = letters.replace(x, "")
                self.lettersValue.set(letters)

    def getConsonants(self):
        letters = str(self.characterEntry.get())
        vowels = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z")
        for x in letters.lower():
            if x in vowels:
                letters = letters.replace(x, "")
                self.lettersValue.set(letters)     

mainWindow = CharacterExtractor()

谢谢大家!


Tags: 字符串textinselfdefpacktkset
2条回答

getVowelsgetConstants函数中,您正在迭代字符串letters.lower(),但在尝试删除/替换letters.replace(x, "")时,您正在尝试删除字母中不存在的小写字母

简单修复:letters.replace(x.lower(), "")

基于正在进行的替换,我建议使用re模块一起执行所有替换,而不是在循环中执行-re.sub("[aeiou]", "", letters, 0, re.I)

获取元音和辅音的简单方法可以是:

from string import ascii_letters  # A to Z and a to z

vowels = 'aeiouAEIOU'
consonants = ''.join(set(ascii_letters)-set(vowels))

编辑:遵循Prashanth Mariswamy给出的正则表达式示例:

要删除元音(使用上面的元音):

re.sub(f"[{vowels}]", "", letters)

要删除辅音(使用上面的辅音):

re.sub(f"[{consonants}]", "", letters)

相关问题 更多 >