使用 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
我正在尝试使用正则表达式提取单词中 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