立即删除python中字符串中任何元音之前或之后的“ y”

时间:2019-02-23 03:28:11

标签: python-3.x

我想删除字符串中的元音,为简单起见,我在下面的代码中仅包含小写字母

for x in "aeiou":
  st = st.replace(i,"")
  return st

这工作正常,但是我想知道如何处理以下情况:如果左侧或右侧有任何元音,我也要删除包含元音的字符串中的y 例如,在“ may”上运行该函数后,应返回“ m”,类似于“ mystry”的“ mystery”。

1 个答案:

答案 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'