为什么re.findall在查找字符串中的三元组项时没有具体说明.Python
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么re.findall在查找字符串中的三元组项时没有具体说明.Python,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1832字,纯文字阅读大概需要3分钟。
内容图文
所以我有四行代码
seq= 'ATGGAAGTTGGATGAAAGTGGAGGTAAAGAGAAGACGTTTGA'
OR_0 = re.findall(r'ATG(?:...){9,}?(?:TAA|TAG|TGA)',seq)
让我解释一下我首先要做什么. . .很抱歉,这令人困惑,但是我将尽力解释一下.
因此,我正在寻找以’ATG’开头的序列,其后为任何单词char [例如3 ‘GGG’,’GTT’,’TTA’等],直到遇到“ TAA”,“ TAG”或“ TGA”为止,我也希望它们的长度至少为30个字符. . .因此{9,}?
这在某种程度上可行,但是如果您随后发现ATG GAA GTT GGA TGA AAG TGG AGG TAA AGA GAA GAC GAT TGA
因此,在这种情况下,如果它以第一个“ ATG”开头并一直到下一个“ TAA”,“ TAG”或“ TGA”,就应该找到“ ATGGAAGTTGGATGA”
然而
当您运行OR_0代码行时,它会吐出整个seq字符串.我不知道如何仅考虑第一个“ TAA”,“ TAG”或“ TGA”,然后考虑第一个“ ATG”
如果以3为单位读取时“ ATG”后面紧跟另一个“ ATG”,那没关系,它不应重新开始,但是如果以3单位读取时遇到“ TAA”,“ TAG”或“ TGA”它应该停止.
我的问题是,为什么re.findall找到最长的序列’ATG’xxx-xxx-[‘TAA’,’TAG’或’TGA’]而不是第一次出现的’TAA’,’TAG’或’TGA’在以单词字符分隔的ATG之后,以3为单位?
再次致歉,如果这令人困惑,但由于我在此初始文本行的基础上弄乱了我拥有的多个数据集,我想找出原因
解决方法:
如果您希望您的正则表达式在第一个TAA | TAG | TGA处停止匹配,但仍然只有在至少有三个三个字母块的情况下才成功,以下内容可能会有所帮助:
>>> import re
>>> regexp = r'ATG(?:(?!TAA|TAG|TGA)...){9,}?(?:TAA|TAG|TGA)'
>>> re.findall(regexp, 'ATGAAAAAAAAAAAAAAAAAAAAAAAAAAATAG')
['ATGAAAAAAAAAAAAAAAAAAAAAAAAAAATAG']
>>> re.findall(regexp, 'ATGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAG')
['ATGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAG']
>>> re.findall(regexp, 'ATGAAATAGAAAAAAAAAAAAAAAAAAAAATAG')
[]
这将使用负前瞻(?!TAA | TAG | TGA)来确保三个字符块在与三个字符块匹配之前不是TAA | TAG | TGA.
请注意,尽管TAA | TAG | TGA不会落在三个字符的边界上,仍然可以成功匹配:
>>> re.findall(regexp, 'ATGAAAATAGAAAAAAAAAAAAAAAAAAAATAG')
['ATGAAAATAGAAAAAAAAAAAAAAAAAAAATAG']
内容总结
以上是互联网集市为您收集整理的为什么re.findall在查找字符串中的三元组项时没有具体说明.Python全部内容,希望文章能够帮你解决为什么re.findall在查找字符串中的三元组项时没有具体说明.Python所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。