从一个句子中删除元音,但在单个字符时删除

时间:2018-01-20 10:19:39

标签: python python-3.x

我需要从句子中删除元音。 但是它应该在句子之间省略单个元音字符,如 I a

如何在输出中包含单个元音字符?

    vowels = ('a', 'e', 'i', 'o', 'u', 'A', 'I', 'E', 'O', 'U')
    def sms_encoding(data):
        list1=data.split()
        list2=''
        list3=''
        for i in range(0,len(list1)):
            if len(list1[i])==1:
                list2+=(list1[i])

            if len(list1[i])!=1: 
                for char in data:    
                    if char in vowels:
                        data = data.replace(char, '')
                        list3=list2+(data)

        return list3

    data="a Have a nice day"
    print(sms_encoding(data))

输出

  

a hv nc dy

1 个答案:

答案 0 :(得分:1)

使用split创建list,其中每个element都是一个单词。然后,您可以使用generator-expression删除words vowels。我们还需要使用str.join将单词连接在一起,并在每个单词之间加一个空格。

这给我们留下了一个简洁的单行解决方案:

def sms_encoding(s):
    return ' '.join(w for w in s.split() if w not in 'aeiou')

并且口译员的测试表明它有效:

>>> sms_encoding('a have a nice day')
'have nice day'

或者,如果您想保持单字符元音但删除单词元音,则可以re.sub使用this regex on regex101

这样会使你的功能像:

import re
def sms_encoding(s):
    return re.sub('(?<!\s)[aeiou](?!\s)', '', s)

在测试时反过来工作:

>>> sms_encoding('a have a nice day')
'a hve a nce dy'