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

时间:2018-07-16 11:46:11

标签: python regex-greedy

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

给出“ bookeeper”一词作为输入,预期的输出将是:

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'无效,并且不能抓住起点或终点。如何强制它排除不包含所有先前匹配项的单词?

1 个答案:

答案 0 :(得分:1)

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

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