gpt4 book ai didi

Python/正则表达式/findall : How do I extract a pattern from behind the match?

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:32 25 4
gpt4 key购买 nike

我确实研究了后视模式 (?<=...) 但这似乎并没有挽救比赛。

输入:

aaaaaaGET(abc)aaaaaa
aaaaaaaaaaaaa
aaaaaMATCH(00)aaaaaaa
aaaaaaaaaaaaa
aaaaGEX(xyz)aaaaaa
aaaaaaGET(notneed)aaaaaa
aaaaaaGEX(no)aaaaaa
aaaaaaGET(nope)aaaaaa
aaaaaaGET(AbC)aaaaaa
aaaaaaaaaaaaa
aaaaaaaaaaaaa
aaaaaMATCH(01)aaaaaaa
aaaaaaaaaaaaa
aaaaGEX(XYz)aaaaaa

输出:

[(abc, 00, xyz), (AbC, 01, XYz]

我想使用 re.findall 找到所有 MATCH 部分,然后是 GET(匹配之上)和 GEX(匹配之下)之后的内容,但我不知道如何从后面得到类似的东西。

如果我所有的相关匹配都在 MATCH 之前,我会得到类似

re.findall('MATCH\((\d*)\).*?GEX\(([A-Za-z]*)\)', text, re.DOTALL)

但不确定如何返回并获取 GET 值

最佳答案

我想你想要这样的东西,

>>> import re
>>> s = """aaaaaaGET(abc)aaaaaa
... aaaaaaaaaaaaa
... aaaaaMATCH(00)aaaaaaa
... aaaaaaaaaaaaa
... aaaaGEX(xyz)aaaaaa
... aaaaaaGET(notneed)aaaaaa
... aaaaaaGEX(no)aaaaaa
... aaaaaaGET(nope)aaaaaa
... aaaaaaGET(AbC)aaaaaa
... aaaaaaaaaaaaa
... aaaaaaaaaaaaa
... aaaaaMATCH(01)aaaaaaa
... aaaaaaaaaaaaa
... aaaaGEX(XYz)aaaaaa"""
>>> m = re.findall(r'GET.*?\(([^)]*)\)(?:(?!GET|GEX).)*?\(([^)]*)\)(?:(?!GET|GEX).)*?GEX\(([^)]*)\)', s, re.DOTALL)
>>> m
[('abc', '00', 'xyz'), ('AbC', '01', 'XYz')]

(?:(?!GET|GEX).)* 否定先行检查以下三个字符不是 GETGEX , 如果它不存在,那么只有它匹配下一个字符。

关于Python/正则表达式/findall : How do I extract a pattern from behind the match?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25506988/

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