gpt4 book ai didi

python - 使用正则表达式查找括号中多个模式的开头和结尾

转载 作者:行者123 更新时间:2023-12-01 05:15:43 25 4
gpt4 key购买 nike

我有一个序列和一个带有多个括号的模式(只有一层深)

seq = "TTVGYDRTERDFSSADFTTVGYDRTERDFSSADFTTVGYDRTERDFSSADFTTVGYDRTERDFSSADF"
pattern = "(TT)V(GYD)"

现在我想匹配模式并获取括号部分的开头和结尾。所以对于这个例子来说是这样的:

[(0,2), (3,6), (17,19), (20, 23), (34,36), (37,40), (51,53), (54,57)]

我已经玩过重新包装并认为我几乎已经拥有它了

[reo.group(1).start(), reo.group(1).end() for reo in re.finditer( pattern, sequence )]

但遗憾的是 .group(1) 仅返回一个字符串而不是“匹配对象”。有谁知道如何实现这一点?

最佳答案

您可以使用未记录的 MatchObject.regs为了您的目的。它似乎在 (g0, g1, g2, ..., gn) 元组中定义匹配区域。

import re

seq = "TTVGYDRTERDFSSADFTTVGYDRTERDFSSADFTTVGYDRTERDFSSADFTTVGYDRTERDFSSADF"
pattern = "(TT)V(GYD)"

result = []
for reo in re.finditer(pattern, seq):
result.extend(reo.regs[1:])

结果:

[(0, 2), (3, 6), (17, 19), (20, 23), (34, 36), (37, 40), (51, 53), (54, 57)]

因此第一场比赛的 reo.regs 如下所示:

(Pdb) reo.regs
((0, 6), (0, 2), (3, 6))

因为您只对各个组的跨度感兴趣,所以我们使用 reo.regs[1:] 选择除前两个元组之外的所有元组(从索引 1 到末尾的切片)。

由于 ((0, 2), (3, 6)) 仍然是一个元组,因此您最终会得到一个列表 [((s0, e0), (s1, e2)), ((s2, e2), (s3, e3)), ...]。为了保持指数列表平坦,我因此 extend一个列表而不是附加到它。

关于python - 使用正则表达式查找括号中多个模式的开头和结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280266/

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