Python:有没有不区分大小写删除字符的方法?
我的代码是用来从用户输入的字符串中去掉元音字母的。它运行得很好,但我想看看有没有办法让我的代码更简单一些。这是我代码的截图
我最开始没有这一行:
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]
,这样就能同时匹配大写和小写的元音字母。