如何在一个句子中的每个元音后检测并打印第一个字母?

时间:2017-04-09 12:56:51

标签: python regex python-3.x

我写了这段代码来检测并打印每个元音后的第一个字母。它的工作原理除非我输入一个带有两个连续元音的单词。它忽略了第二个元音。例如,如果我输入“学年”'结果应该是:

o
l
a
r

但我只能

o
a

那么我做错了什么?我对python很新,我还在学习。

def find_after_vowel(word):
for match in re.findall(r"[ouieaOUIEA](\w{1}|\s)", word):
      print (match)

3 个答案:

答案 0 :(得分:3)

您可以使用finditer和生成的匹配对象的start方法查找每个匹配的索引,然后使用它来获取每个元音之后的字母:

import re

def find_after_vowel(word):
    for match in re.finditer(r"[ouieaOUIEA]", word):
          print word[match.start()+1] 

find_after_vowel("school year")

将输出:

o
l
a
r

如果您希望它返回列表而不是打印结果,请使用:

import re

def find_after_vowel(word):
    after_vowels = []
    for match in re.finditer(r"[ouieaOUIEA]", word):
          after_vowels.append(word[match.start()+1])
    return after_vowels

after_vowels = find_after_vowel("school year")
print after_vowels

将输出:

['o', 'l', 'a', 'r']

答案 1 :(得分:0)

尝试以下正则表达式:[ouieaOUIEA]([^ouieaOUIEA]|\s)

答案 2 :(得分:0)

如果我理解你,你可以试试这个:

import re

def find_after_vowel(word):
    index = re.search(r'[ouieaOUIEA]', word).span()[0] + 1
    return word[index]

print(find_after_vowel('test')) # s
print(find_after_vowel('abc')) # b
print(find_after_vowel('def')) # f
print(find_after_vowel('abcdef')) # b