我正在尝试使用python中的re
包匹配字符串QGYGQGYQQG
中的所有GY
或YG
组合。我将所有这些匹配项都放在一个dict中,以便将来查找
我遇到的问题是当Y
两边都是G
时:基本上,我的正则表达式不能在GYG
中同时捕获GY
和{
这是我目前的代码:
import re
seq = 'QYGQGYGQQG'
regex = re.compile('(GY|YG)|(?<=Y)G')
iterator = regex.finditer(seq)
dd = {}
for matchedobj in iterator:
dd[matchedobj.group()] = dd.get(matchedobj.group(), []) + [matchedobj.start()]
输出:
{'G': [6], 'GY': [4], 'YG': [1]}
您可以使用较新的
regex
模块(或使用lookarounds):或-带
re.finditer
:这将产生
以下是一个您可以使用的解决方案,它不依赖于重叠匹配:
这张照片是:
这里的诀窍是只匹配
G
和Y
,使用前向断言接下来的内容是进行完全匹配所需的Y
或G
。这避免了使用第二个字母的问题,第二个字母也可能是另一个后续匹配的第一个字母。然后,我们采用表示完整匹配的单字母匹配,并使用列表理解来构建原始重叠匹配相关问题 更多 >
编程相关推荐