我想找到单词中的第一个元音,并在第一次出现元音之前删除所有字母,最后返回单词的左侧。我以为我可以使用列表来做到这一点,先在单词中找到'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'。第3步是找到左边的单词在句子和每个单词中,找到第一个元音或'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,
答案 0 :(得分: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
字符匹配,因为它们不属于班级。