我想找到一个单词中的第一个元音,并删除第一次出现元音之前的所有字母,最后返回单词的左边。我想我可以用一个列表来做到这一点,首先在单词中找到'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,