単語の最初の母音を見つけ、母音の最初の出現の前のすべての文字を削除し、最終的に単語の左側を返したいと思います。リストを使用してそれを行うことができると思いました。最初に単語の「a」を見つけ、「a」で区切られた最初の部分を取得し、次に「e」を見つけます.....しかし、通常の方法で単純化したい5 つの母音をすべて同時に見つけて、最初の母音のインデックスを取得できる方法があれば、次のステップを簡単に実行できると考えています。だから私はいくつかの助けが必要かもしれません。私は正規表現の初心者ですが、これについて誰か考えがありますか?
私は再び問題を抱えています。これは、@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
しかし、今は最初の 2 つのステップを完了しただけです。1. 母音で始まる単語を見つけて、その末尾に「hay」を追加します。2.「qu」で始まる単語を見つけて、「qu」を最後に移動し、「ay」を追加します。3 番目のステップは、左の単語を見つけることです。すべての単語について、その中の最初の母音または 'y' ('y' が最初の文字でない場合) を見つけ、母音の前のすべての文字を末尾に移動し、'ay' を追加します。コードは次のように実行されます。
ietquayayaskhjhay ay ahay dhjsadf skdhyksj qdksdj y
re.sub は置換を使用してブロックを置き換えるため、 \b を正しい方法で使用しなかったと思います。それを正しくする方法は?ちなみに、「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,