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
实例,因为它们包含相应匹配的位置信息,即索引。更多信息可在此处找到: