我正在尝试创建以下正则表达式:从以下RNA字符串返回一个介于AUG
和(UAG
或{AGCCAUGUAGCUAACUCAGGUUACAUGGGGAUGACCCCGCGACUUGGAUUAGAGUCUCUUUUGGAAUAAGCCUGAAUGAUCCGAGUAGCAUCUCAG
,以便找到所有匹配项,包括重叠的匹配项。在
我试过几种正则表达式,结果都是这样:
matches = re.findall('(?=AUG)(\w+)(?=UAG|UGA|UAA)',"AGCCAUGUAGCUAACUCAGGUUACAUGGGGAUGACCCCGCGACUUGGAUUAGAGUCUCUUUUGGAAUAAGCCUGAAUGAUCCGAGUAGCAUCUCAG")
你能告诉我正则表达式模式中的错误吗?在
如果你不考虑“匹配”,而是考虑“间隔”,我想你会发现这更容易。这就是@ionut hulub所做的。正如我在下面演示的那样,您可以在一个过程中完成它,但是您可能应该使用更简单的finditer()方法,除非您有足够的RNA字符串(或者它们足够长)来避免对字符串的冗余传递。在
不幸的是,
re
模块目前不支持重叠匹配,但是您可以很容易地将解决方案分解如下:用一个正则表达式来实现这一点实际上是相当困难的,因为大多数特定的不需要重叠的匹配。但是,您可以通过一些简单的迭代来实现:
不过,这也有一些问题。在
AUGUAGUGAUAA
的情况下,您希望返回的结果是什么?有两条线要退吗?还是只有一个?{{cd2}继续捕获{cd3}的正则表达式。为了解决这一问题,您可能希望使用?
运算符使您的运算符变懒-这种方法将无法捕获较长的子字符串。在也许在字符串上迭代两次就是答案,但是如果你的RNA序列包含
AUGAUGUAGUGAUAA
,那又如何呢?那里的正确行为是什么?在我可能倾向于使用无正则表达式的方法,通过迭代字符串及其子字符串:
^{pr2}$这样,你一定能得到所有的匹配,不管怎样。在
如果需要跟踪每个匹配项的位置,可以修改候选项的数据结构,以使用保持起始位置的元组:
哪个打印:
见鬼,再加上三行,你甚至可以根据它们在RNA序列中的位置对它们进行排序:
在最后一次印刷之前,你可以:
相关问题 更多 >
编程相关推荐