使用 Python 查找特定的重叠模式

Finding specific overlapping pattern using Python

我正在尝试使用正则表达式提取单词中 VCV(元音辅音元音)模式的所有实例。这还应该包括开始和结束,在开始时可以是 CV,在结束时可以是 VC。

给定单词 "bookeeping" 作为输入,预期输出将是:

boo, ookee, eepi, ing

我目前使用正则表达式库进行重叠模式的尝试如下所示:

import regex as re

word = "bookeeping"
print(re.findall(r'[aeiouy]+?[bcdfghkjlmnpqrstvwxz]+[aeiouy]+', word, overlapped=True))

(不正确的)输出:

['ookkee', 'okkee', 'eepi', 'epi']

'okkee' 无效,不抓取开始或结束。我如何强制它排除不包含所有前面匹配项的词?

从您的预期输出看来,元音在您要查找的元音-辅音-元音模式中是可选的,在这种情况下,将执行以下操作:

import re
pos = 0
while True:
    match = re.search(r'[aeiouy]*[bcdfghkjlmnpqrstvwxz]+([aeiouy]*)', 'bookeeping'[pos:])
    if not match:
        break
    print(match.group(0))
    pos += match.start(1)

这输出:

boo
ookee
eepi
ing