我想删除字符串中的元音,为简单起见,我在下面的代码中仅包含小写字母
for x in "aeiou":
st = st.replace(i,"")
return st
这工作正常,但是我想知道如何处理以下情况:如果左侧或右侧有任何元音,我也要删除包含元音的字符串中的y 例如,在“ may”上运行该函数后,应返回“ m”,类似于“ mystry”的“ mystery”。
答案 0 :(得分:5)
这可能是一项家庭作业,但实际上最简单的(虽然不一定是最快的)将使用正则表达式:
import re
p = re.compile(r'(?i)y?[aeiou]y?')
p.sub('', 'may')
# 'm'
p.sub('', 'mystery')
# 'mystry'
使用纯python,您可以列出字符串,遍历每个字符,并相应地删除字符(是的,您已经这样做了,因此您需要使用if语句修改现有代码以解决“ y”的情况),然后重新加入。这是一个例子。
def remove_vowels_with_y(string):
# Cache vowel set for better lookup performance.
v = set('aeiouAEIOU')
# Listify your string. This is because strings are immutable.
chars = list(string) + [''] # Sentinel character.
# Initialization.
filtered = []
prev_is_vowel = False
for i, c in enumerate(chars[:-1]):
# Add elements to `filtered` if conditions are met.
if not (c in v or (c in 'yY' and (prev_is_vowel or chars[i+1] in v))):
filtered.append(c)
prev_is_vowel = c in v
# Join filtered list and return result.
return ''.join(filtered)
remove_vowels_with_y('may')
# 'm'
remove_vowels_with_y('mystery')
# 'mystry'