删除句子中的元音,但不包括当其是一个单一字母时

2024-04-26 11:10:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要把这个句子的元音去掉。 但是它应该省略单个元音char,比如Ia

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

    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


Tags: infordatalenifsmsencoding句子
1条回答
网友
1楼 · 发布于 2024-04-26 11:10:00

使用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'

相关问题 更多 >