gpt4 book ai didi

Python 正则表达式 : Capture overlapping parts

转载 作者:行者123 更新时间:2023-12-02 06:03:27 25 4
gpt4 key购买 nike

给定一个字符串 s = "<foo>abcaaa<bar>a<foo>cbacba<foo>c"我正在尝试编写一个正则表达式,它将提取以下部分:尖括号及其内部文本和周围文本。像这样:

<foo>abcaaa
abcaaa<bar>a
a<foo>cbacba
cbacba<foo>c

所以预期的输出应该是这样的:

["<foo>abcaaa", "abcaaa<bar>a", "a<foo>cbacba", "cbacba<foo>c"]

我发现了这个问题How to find overlapping matches with a regexp?这让我更接近期望的结果,但我的正则表达式仍然不起作用。

regex = r"(?=([a-c]*)\<(\w+)\>([a-c]*))"

有什么想法可以解决这个问题吗?

最佳答案

您可以通过在环视断言中使用捕获组来将重叠内容与标准正则表达式语法进行匹配,因为这些组可能会匹配字符串的部分内容,而不会消耗匹配的子字符串,从而阻止其进一步匹配。在这个特定的示例中,我们匹配字符串的开头或 > 作为捕获实际目标的前瞻断言的 anchor :

(?:\A|>)(?=([a-c]*<\w+>[a-c]*))

参见regex demo .

在 python 中,我们使用 re.findall() 的属性,仅在表达式中存在捕获组时返回在组中捕获的匹配项:

text = '<foo>abcaaa<bar>a<foo>cbacba<foo>c'
expr = r'(?:\A|>)(?=([a-c]*<\w+>[a-c]*))'
captures = re.findall(expr, text)
print(captures)

输出:

['<foo>abcaaa', 'abcaaa<bar>a', 'a<foo>cbacba', 'cbacba<foo>c']

关于Python 正则表达式 : Capture overlapping parts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60981242/

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