Python:有没有不区分大小写删除字符的方法?

-4 投票
3 回答
38 浏览
提问于 2025-04-12 19:11

我的代码是用来从用户输入的字符串中去掉元音字母的。它运行得很好,但我想看看有没有办法让我的代码更简单一些。这是我代码的截图

我最开始没有这一行:

     elif i == "A" or i == "E" or i == "I" or i == "O" or i == "U":
        n.replace(i, "")
        output = output

但我加上了这一行,因为当我的输入中有大写的元音字母时,它不会去掉这些元音字母,因为它们是大写的。

有没有办法重写我的代码,这样我就可以在不增加额外代码行的情况下,去掉小写和大写的元音字母呢?

3 个回答

0

(已编辑以修正)

这里有一种方法可以做到:

word = input()

output = ""
for letter in word:
    if letter.casefold() not in "aeiou":
        output += letter

print(output)

把它做成一个函数:

def remove_vowels(word):
    output = ""
    for letter in word:
        if letter.casefold() not in "aeiou":
            output += letter
    return output
1

你可以把字母都变成小写,这样就不用重复比较了:

if i.lower() in 'aeiou':
    n.replace(i, "")

不过你可以用正则表达式写得更简单,不需要循环:

import re

def remove_vowels(n):
    return re.sub(r'[aueoi]', '', n, flags=re.IGNORECASE)

这个方法基本上是把列表中的字母 [a, u, e, o, i] 都去掉,加上 flags=re.IGNORECASE 之后就能同时匹配大写和小写字母,然后把每个字母替换成 '',也就是把它们去掉。

1

你可以使用正则表达式,特别是内置的 re.sub 函数:

import re
text = "ThE quick brown fOx jumps over the lazy dog"
re.sub("[aeiou]","", text, flags=re.IGNORECASE)

'Th qck brwn fx jmps vr th lzy dg'

这里的正则表达式 [aeiou] 会匹配任何一个元音字母,而标志 re.IGNORECASE 则允许它同时匹配大写的元音字母。你也可以把模式扩展为 [AEIOUaeiou],这样就能同时匹配大写和小写的元音字母。

撰写回答