如何从模式中打印不匹配的字母

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从模式中打印不匹配的字母相关的知识,希望对你有一定的参考价值。

我有两组蛋白质序列数据。如您所见,这2个序列看起来相同,但实际上它们之间有1个不同的氨基酸(字母)。

例如:

档案1:

TV*TV*TV*TISTI*VWGKIGIRIE*PWIVSISEVESVACNSKNSNNNSE*K**FSEHFDLNYEN*K

文件2:

TV*TV*TV*TISTI*VWGKIGIRIE*PWIVSISVVESVACNSKNSNNNSE*K**FSEHFDLNYEN*K

期望的输出:

档案1:

E

文件2:

V

我知道我们可以使用grep,comm,diff命令从两组数据中打印出不同的模式;搜索基于线。但在这种情况下,我如何打印这两种模式之间不同的字母?谢谢。

答案

我认为你不需要re模块。只需一个循环即可修复您的代码。

file1='TV*TV*TV*TISTI*VWGKIGIRIE*PWIVSISEVESVACNSKNSNNNSE*K**FSEHFDLNYEN*K'
file2='TV*TV*TV*TISTI*VWGKIGIRIE*PWIVSISVVESVACNSKNSNNNSE*K**FSEHFDLNYEN*K'
for i in range(len(file1)):
    if(file1[i]!=file2[i]):
        print(file1[i]),(file2[i])

你的输出是:E V

在这里,我们逐字母地比较文件。

另一答案

对于循环:

test_two_strings <- function(string1 = file1, string2 = file2){
                          for(i in 1:nchar(file1)){
                            if (substr(file1, i, i) != substr(file2,i, i)){
                              cat(paste("File 1:", substr(file1, i, i) ,"File 2:", substr(file2, i, i),sep = "
"))
                              break()
                                       }
                                  }
                             }

microbenchmark(test_two_strings(), times = 1000)

VUnit: microseconds
               expr     min      lq     mean  median      uq      max neval
 test_two_strings() 133.927 144.199 169.5508 148.544 160.791 2132.148  1000
另一答案

你也可以尝试这个,我用两个字符串进行比较,如果条件失败我在字符串之间检查。

str1 ="TV*TV*TV*TISTI*VWGKIGIRIE*PWIVSESsVESVACNSKNSNNNSE*K**FSEHFDLNYEN*K"
str2 ="TV*TV*TV*TISTI*VWGKIGIRIE*PWIVSVSsVESVACNSKNSNNNSE*K**FSEHFDLNYEN*K"

for i in range(len(str1)/2):
    if(str1[i:i+2] !=  str2[i:i+2]):
         if  (str1[i:i+1] !=  str2[i:i+1]):
            str1[i:i+1]+"
"+str1[i+1:i+2]
         else:
            print str1[i+1:i+2]+"
"+str2[i+1:i+2]

以上是关于如何从模式中打印不匹配的字母的主要内容,如果未能解决你的问题,请参考以下文章

学习正则表达式笔记

Java模式与组匹配

C语言习题如何在 C 中不使用任何分号打印从 1 到 N 的数字?

如何使用 awk 打印匹配的正则表达式模式?

匹配一组字符

文本三剑客之grep