我希望使用正则表达式将单词分成
在这个例子中,我们得到了:
问题在于我希望匹配重叠- 最后一组元音应成为下一个匹配的第一组。如果我们使用前瞻替换正则表达式,则这似乎是可能的,如下所示:
我们得到:
这意味着我们正在匹配我想要的内容。然而,它现在没有返回最后一组元音字母。我想要的输出结果是:
我认为这应该是可能的(如果正则表达式可以检查第二组元音,我认为它也可以返回它们),但我找不到除了 brute force 方法以外的任何方法来实现它,即在获得结果后循环遍历并将下一个匹配的第一个字符追加到最后一个匹配中,并将字符串的最后一个字符追加到最后一个匹配中。是否存在更好的方法来实现此目标?
有两种方法可以解决这个问题:一种是捕获 lookahead 值,另一种是在匹配时不消耗文本,同时捕获值 - 但我找不到任何方法来实现这两种方法。
(元音字母、非元音字母、更多元音字母)
三组,并使用标记确保每个单词都以元音字母开头和结尾。import re
MARKER = "~"
VOWELS = {"a", "e", "i", "o", "u", MARKER}
word = "dog"
if word[0] not in VOWELS:
word = MARKER+word
if word[-1] not in VOWELS:
word += MARKER
re.findall("([%]+)([^%]+)([%]+)".replace("%", "".join(VOWELS)), word)
在这个例子中,我们得到了:
[('~', 'd', 'o')]
问题在于我希望匹配重叠- 最后一组元音应成为下一个匹配的第一组。如果我们使用前瞻替换正则表达式,则这似乎是可能的,如下所示:
re.findall("([%]+)([^%]+)(?=[%]+)".replace("%", "".join(VOWELS)), word)
我们得到:
[('~', 'd'), ('o', 'g')]
这意味着我们正在匹配我想要的内容。然而,它现在没有返回最后一组元音字母。我想要的输出结果是:
[('~', 'd', 'o'), ('o', 'g', '~')]
我认为这应该是可能的(如果正则表达式可以检查第二组元音,我认为它也可以返回它们),但我找不到除了 brute force 方法以外的任何方法来实现它,即在获得结果后循环遍历并将下一个匹配的第一个字符追加到最后一个匹配中,并将字符串的最后一个字符追加到最后一个匹配中。是否存在更好的方法来实现此目标?
有两种方法可以解决这个问题:一种是捕获 lookahead 值,另一种是在匹配时不消耗文本,同时捕获值 - 但我找不到任何方法来实现这两种方法。