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

Python 如何检测和打印句子中每个元音后的第一个字母?,python,regex,python-3.x,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) 请尝试以下正则表达式:[

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

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)

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

如果我理解正确,您可以尝试以下方法:

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

您可以使用结果匹配对象的
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
['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
['o', 'l', 'a', 'r']

您可以将一个或多个元音与
+
匹配<代码>r'[aeiou]+(.)”(然后使用
re.I
使其不区分大小写)。这是否意味着您希望将辅音放入第2组?那么为什么要使用
\w
\s
?瞧。@jonrsharpe,谢谢,它起作用了。我应该在哪里使用
re.I
?阅读
regex
文档并查找“标志”,这是意外的?如果不想查找所有事件,为什么要使用
.findall
?你应该得到什么输出?在最后一次打印中,我希望输出为“b”和“f”。非常感谢。你能解释一下
.findall
.finditer
之间的区别吗?我一直在读这方面的文章,但我仍然不明白其中的区别。不客气
findall
以字符串列表的形式返回匹配项,而
finditer
返回可生成
MatchObject
实例的iterable。对于此任务,我们需要
MatchObject
实例,因为它们包含相应匹配的位置信息,即索引。更多信息可在此处找到: