gpt4 book ai didi

Python 正则表达式 : Capture lookahead value (capturing text without consuming it)

转载 作者:行者123 更新时间:2023-11-28 19:58:23 27 4
gpt4 key购买 nike

我希望使用正则表达式将单词分成组(vowels, not_vowels, more_vowels),使用标记来确保每个单词以元音开头和结尾。

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', '~')]

我觉得这应该是可能的(如果正则表达式可以检查第二组元音,我认为没有理由不能返回它们),但除了蛮力方法之外我找不到任何方法,在获得结果后循环遍历结果,并将下一个匹配项的第一个字符附加到最后一个匹配项,并将字符串的最后一个字符附加到最后一个匹配项。有没有更好的方法可以做到这一点?

可行的两件事是捕获前瞻值,或者在捕获值的同时不使用匹配项中的文本 - 我找不到任何方法。

最佳答案

刚发帖就发现了:

re.findall("([%]+)([^%]+)(?=([%]+))".replace("%", "".join(VOWELS)), word)

在前瞻中添加一对额外的括号意味着它本身成为一个捕获。

我发现这非常晦涩难懂 - 我不确定是否只有其他人发现这一点很明显,但希望将来任何人在我的位置上都能更容易地找到它。

关于Python 正则表达式 : Capture lookahead value (capturing text without consuming it),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081060/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com