有没有其他方法可以使用findall查找多个模式而不是仅仅添加函数?我刚刚开始使用python ...
txt = "UUUUUUUUUUUUUUCUUCUUCUUCUUCUUC"
print ("Phenylalanine " ) + str(len(re.findall(r'UUC',txt)) + len(re.findall(r'UUU',txt)))
这给出了10个匹配的正确答案,但这很难,当有更多模式时会发生什么:
print ("Leucine " ) + str(len(re.findall(r'UUA',txt)) + len(re.findall(r'UUG',txt)) + len(re.findall(r'CUU',txt)) + len(re.findall(r'CUC',txt)) + len(re.findall(r'CUA',txt)) + len(re.findall(r'CUG',txt)))
想到:
list1 = ['UUU', 'UUC', 'UUA', 'UUG', 'CUU', 'CUC', 'CUA', 'CUG' ];
list2 = ['Phenylalanine', 'Leucine'];
但是如何将它们匹配在一起?
或类似的东西:
print ("Phenylalanine " ) + str(len(re.findall(r'UUC' **and** 'UUU',txt)))
但/和/和/或/没有给我正确答案
我有64种模式可以匹配23个名字,如何更容易地做到这一点?怎么用桌子? 谢谢
答案 0 :(得分:-1)
因此,一种方法是迭代list1中的所有项目:
sequences = {
'Phenylalanine' : [r'UUU', r'UUC'],
'Leucine' : [r'UUA', r'UUG', r'CUU', r'CUC', r'CUA', r'CUG' ]
}
for name, sequence_list in sequences.items():
print (name, str(sum(len(re.findall(i, txt)) for i in sequence_list)))
上述方法并不好,因为它多次调用findall
。
另一种方法,如果你只想解析字符串一次将使用正则表达式的OR。 (abc|cde)
将匹配abc或cde。但正则表达式更复杂,我不确定它是否会给你相同的结果。
通过正则表达式的简单方法是:len(re.findall(r"(UUC|UUU)", txt))
如果你有一个类似上面sequences
的列表,那就像是:
sequences = {
'Phenylalanine' : [r'UUU', r'UUC'],
'Leucine' : [r'UUA', r'UUG', r'CUU', r'CUC', r'CUA', r'CUG' ]
}
for name, sequence_list in sequences.items():
print (name, str(len(re.findall("(" + "|".join(sequence_list) + ")", txt)))
以上两种方法都给了我:
Leucine 5
Phenylalanine 10
注意:您的整体问题似乎是DNA测序问题之一。我建议你使用一个预先存在的库来做这样的事情,因为如果你在这里深入工作会变得更加复杂。