使用正则表达式查找字符串中的字母

时间:2013-11-11 12:53:41

标签: python regex

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

1 个答案:

答案 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字符匹配,因为它们不属于班级。