我正在尝试在 Python 3 中创建一个正则表达式,它匹配由未知数量的字符分隔的 7 个字符(例如 >AB0012),然后匹配另外 6 个字符(例如 aaabbb 或 bbbaaa)。我的输入字符串可能如下所示:
>AB0012xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab ayyyyyyyyyyyyyyyyyyyy>ZP0199000000000000000000012mmmm3m4mmmmmmmmxxxxxxxxxxxxxxxxxaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这是我想出的正则表达式:
matches = re.findall(r'(>.{7})(aaabbb|bbbaaa)', mystring)
print(matches)
我尝试生成的输出如下所示:
[('>CD00192', 'aaabbb'), ('>CD00192', 'bbbaaa'), ('>ZP01990', 'aaabbb')]
我通读了 Python 文档,但找不到如何匹配正则表达式的两个部分之间的未知距离。是否有某种通配符可以让我完成我的正则表达式?先谢谢您的帮助!
编辑:
如果我在代码中使用 *?
,如下所示:
mystring = str(input("Paste promoters here: "))
matches = re.findall(r'(>.{7})*?(aaabbb|bbbaaa)', mystring)
print(matches)
我的输出如下所示:
[('>CD00192', 'aaabbb'), ('', 'bbbaaa'), ('', 'aaabbb')]
*列表中的第二项和第三项分别缺少 >CD00192 和 >ZP01990。如何让正则表达式在列表中包含这些字符?
最佳答案
这是一种非正则表达式方法。按“>”拆分(您的数据将从第 2 个元素开始),然后由于您不关心这 7 个字符是什么,因此从第 8 个字符开始检查直到第 14 个字符。
>>> string=""" AB0012xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>CD00192aaabbblllllllllllllllllllllyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyybbbaaayyyyyyyyyyyyyyyyyyyy>ZP0199000000000000000000012mmmm3m4mmmmmmmmxxxxxxxxxxxxxxxxxaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"""
>>> for i in string.split(">")[1:]:
... if i[7:13] in ["aaabbb","bbbaaa"]:
... print ">" + i[:13]
...
>CD00192aaabbb
关于python - 正则表达式帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764642/