-4

我想找到一个单词中的第一个元音,并删除第一次出现元音之前的所有字母,最后返回单词的左边。我想我可以用一个列表来做到这一点,首先在单词中找到'a',然后用'a'分隔第一部分,然后找到'e'.....但我想用常规来简化它表达,我在想如果有一种方法可以同时找到所有五个元音并获得第一个元音的索引,那么下一步就很容易了。所以我可能需要一些帮助。我是正则表达式的新手,有人知道吗?

我又有问题了。这是我根据@Martijin 的建议编写的代码。

import re
def pigify():
    user_input=raw_input()
    sentence=re.sub(r'\b([aeiou])([a-z]*)\b',r'\1\2'+'hay',user_input,re.I)
    sentence1=re.sub(r'\b(qu)([a-z]*)\b',r'\2\1'+'ay',sentence,re.I)
    sentence2=re.sub(r'\b([^aeiou]*)(\w*)\b',r'\2\1'+'ay',sentence1,re.I)
    print sentence2
    return
pigify()

如果我输入:

quiet askhj a dhjsadf skdhyksj qdksdj y 

我想得到:

ietquay askhjhay ahay adfdhjsay yksjskdhay qdksdjay yay

但现在我只完成了前两个步骤:1。找到元音开头的单词并在其末尾添加'hay',2.找到'qu'开头的单词并将'qu'移动到末尾然后添加'ay'。第三步是找到左边的单词在句子中和每个单词中,找到第一个元音或'y'(当'y'不是第一个字母时),将元音之前的所有字母移到末尾并添加'ay'。代码运行结果如下:

ietquayayaskhjhay ay ahay dhjsadf skdhyksj qdksdj y

我想我没有以正确的方式使用 \b,因为 re.sub 使用替换来替换块。如何正确处理?顺便说一句,我用'for'循环和'if|else'完成了另一个版本,这是代码,我认为必须有一种方法来简化它。

def SieveWord(user_input):
    return user_input.split(' ')
def UpperToLower(user_input):
    return user_input.lower()

vowel=['a','e','i','o','u']                               
transform_input=UpperToLower(raw_input())            
input_list=SieveWord(transform_input)                
u=[]                                                 

for word in input_list:                              
    if len(word)!=1:                                 
        if word[0] in vowel:                         
            word+='h'                                
        else:
            if word[0]+word[1]=='qu':
                word=word[2:]+'qu'                   
            else:
                for letter in word:                 
                    if letter in vowel or (letter=='y' and word[0]!='y'):
                        position=word.index(letter)         
                        removepart=word[0:position]         
                        word=word[position:]+removepart     
                        break                                                    
    elif word in vowel:                              
        word+='h'                                    
    u.append(word+'ay')                              
for d in u:
    print d,    
4

1 回答 1

3

您可以使用正则表达式删除单词开头的所有非元音:

re.sub(r'\b[^aeoui]*', '', inputstring, flags=re.I)

演示:

>>> import re
>>> inputstring = 'School'
>>> re.sub(r'\b[^aeoui]*', '', inputstring, flags=re.I)
'ool'

[^...]否定类匹配任何不是元音的东西(带有确保它会忽略大小写的标志re.I)。\b锚点匹配字符串中单词之前或之后的位置。在re.I上面的示例中,\b匹配开始,而否定类匹配Sch字符,因为它们不在类中。

于 2013-11-11T12:57:30.217 回答